Understanding Velocity Caching Options

$rx.cache Velocity Methods

The $rx.cache Velocity tool provides the Velocity Template developer with the ability to define and manage cache’s for objects or datasets while working within their templates.  

$rx.cache.flush([key], cache)

Remove all entries from the named cache. If key is specified will remove the specified key from the cache.

$rx.cache.get(key, cache)

Retrieves an object from the named cache. If the object is not found, a null or empty object will be returned.

$rx.cache.put(key, object, cache)

Places an object into the named cache, linked to the named key.  Replaces the current value for the key if it already exists in the cache with the object value.

$rx.cache.setTimeToIdle(key,cache,timeInSeconds)

The maximum amount of time between accesses / cache hits before an element expires from cache.

$rx.cache.setTimeToLive(key,cache,timeInSeconds)

Sets the time to live for an element before it expires . i . e .   The maximum time between creation time and when an element expires .

System Velocity Caches

The system defines two context based caches that may be used by template developers:

  • Preview Velocity Cache - sys_VelocityPreviewCache
  • Publish Velocity Cache - sys_VelocityPublishCache

When caching data within templates, it is important understand the Publishing Context / Channel that the template is being rendered for and to use a matching Cache for that context.  This is to prevent scenarios where changes to an item in cache when a template is in a Preview context for example from affecting a running publishing edition. It is recommened to create custom caches for each publishing context and to put and get items from a cache that matches the context.  If the publishing context is 0 for example, you would use the Preview cache.

 

User Defined Velocity Caches

Template developers can define their own caches by defining the cache in the rx_resources/cache/ehcache.xml file on the server.   A reference on configuring ehcach can be found here: http://www.ehcache.org/documentation/2.8/configuration/configuration.html

For example, the following xml snippet configures a new Cache named CustomCache that can hold up to 2000 objects in memory.

<cache name="CustomCache"
maxElementsInMemory="2000"
eternal="true"
overflowToDisk="false"
/>

Overriding System Caches

 System caches are defined in the <InstallDir>/sys_resources/cache folder.  This file will be overwritten on upgrade.  In order to tune or optimize a system cache with custom setttings for your environment.  System caches may be overriden by adding the system cache to the <installDir>/rx_resources/cache/ehcache.xml file. 

The configuration in /rx_resources/cache/ehcache.xml will override the configuration in sys_resources/cache/ehcache.xml for any caches that have the same name.  

For example, to tune the AssemblyTemplate cache to be optimized for a system that has more than 700 templates, copy the cache definition from sys_resources/cache/ehcache.xml into the rx_resources/cache/ehcache.xml file and up the maxElementsInMemory to 1000.

 

 <cache name="PSAssemblyTemplate"
maxElementsInMemory="1000"
eternal="true"
overflowToDisk="false"
/>

NOTE: In older versions of Rhythmyx the cache configuration was defined in the WEB-INF/classes folder of the main application.  That file is no longer used after patching to 732_20180314 patch level.