The wwCache class provides a simple caching mechanisms for strings. Caching allows you to generate output once, store it to the cache and then attempt to retrieve it from the cache if it already exists the next time the same content is required. This can save time reproducing output that might be very time consuming and instead simply reusing previously generated output.
Cached items are accessible by key and have an expiration, which allows for timing the availability of cached content to a timeout period that content is valid. If you have a busy site, don't be afraid of short cache durations. It's better to generate once and have an item served hundreds of times in a few minutes, than generate each and every time. The savings are huge and the overhead of re-generating every few minutes is likely minor by comparison.
Caching is powerful for storing previously generated output - complete HTML repsonses, or HTML fragments of a page. XML results or fragments of results. You can even cache binary content like the result of a PDF output generation for example. Anything that can be represented as a string can be cached.
Caching can provide huge performance gains for your applications by avoiding regenerating output and not requiring you to go back to the database to re-run complex queries. Instead results are returned from a single indexed key of the cache cursor or table.
DO wwCache
*** Generally try to make the cache 'global' so it sticks around
goCache = CREATEOBJECT("wwCache")
*** Check if the key exists
lcTime = goCache.GetItem("Time")
*** If it doesn't add a new key
IF ISNULL(lcTime)
goCache.AddItem("Time", TIME() )
ENDIF
*** Retrieval from cache at some point
? goCache.GetItem("Time")
*** Get a key or add one if it doesn't exist
*** This code effectively does what the code above does in 1 line
lcTime = goCache.GetOrAddItem("Time", Time())
? lcTime && Existing or new value
wwCache
Remarks
The cache is implemented as a cursor, so the contents of the cache is not permanently stored on disk, but stored in temporary files.
Category list items are case sensitive
Class Members
Member | Description | |
---|---|---|
AddItem |
This method adds an item to the cache. o.AddItem(lcKey as String, lcValue as String, lnTimeoutSeconds as Integer) |
|
Clear |
Clears the cache of all values by closing the cache cursor and creating a new one. o.Clear() |
|
Expire |
Removes all expired entries from the cache data file. o.Expire() |
|
GetItem |
Retrieves an item by key from the cache. Item is returned if it exists and not expired. o.GetItem(lcKey as String) |
|
GetOrAddItem |
This method is a combination of GetItem() and AddItem() which retrieves a value if it exists, or sets a value if it doesn't. In either case the value (existing or new) is returned.o.GetOrAddItem(lcKey, lcNewValue, lnTimeoutSeconds) |
|
IsCached |
Determines whether an item exists in the cache or not. o.IsCached(lcKey as String) |
|
Open |
Opens the cache cursor. Either creates it or just uses it if already open. o.Open() |
|
Reindex |
Packs and reindexes the file specified in the cFixedFileName. This method works only if the cFixedFilename property is set and only if an exclusive lock can be set on the table. o.Reindex() |
|
Remove |
This method removes an entry from the Cache. o.Remove(lcKey) |
|
cCacheCursor |
The name of the cursor used for caching. | |
cFixedFileName |
This property allows you to specify a fixed filename for the cache. including the .DBF extension. | |
nDefaultCacheTimeout |
The default timeout for the cache in seconds. |
Requirements
Assembly: wwCache.prgSee also:
How wwCache works | When and How to use Caching© West Wind Technologies, 2024 • Updated: 05/30/24
Comment or report problem with topic