  RAM Cache Managers

    For background information, see the
    <a href="../../OFSP/Help/Caching.stx">description of cache management</a>.

    The RAM cache manager allows you to cache the result of calling 
    expensive objects, such as Python Scripts and External Methods,
    in memory.  It provides access statistics and simple configuration 
    options.

    Not all objects are appropriate for use with a RAM Cache Manager.
    See the **caveats** section below.

    Storing the result in memory results in the fastest possible cache
    retrieval, but carries some risks.  Unconstrained, it can consume too
    much RAM.  And it doesn't reduce network traffic, it only helps
    Zope return a result more quickly.

    Fortunately, RAM cache managers have tunable parameters.  You can
    configure the threshold on the number of entries that should be in
    the cache, which defaults to 1000.  Reduce it if the cache is taking
    up too much memory or increase it if entries are being cleared too
    often.

    You can also configure the cleanup interval.  If the RAM cache is
    fluctuating too much in memory usage, reduce the cleanup interval.

    Some caches have a maximum age parameter, by which you can set a
    lifetime on cached entries.  This is in contrast to the cleanup
    interval, which determines when the system checks for excess of
    any expiration criteria, maximum age included.

    Finally, you can configure the list of REQUEST variables that will
    be used in the cache key.  This can be a simple and effective way
    to distinguish requests from authenticated versus anonymous users
    or those with session cookies.

    If you find that some of your objects need certain cache parameters
    while others need somewhat different parameters, create multiple
    RAM cache managers.

    The 'Statistics' tab allows you to view a summary of the contents
    of the cache.  Click the column headers to re-sort the list, twice
    to sort backwards.  You can use the statistics to gauge the
    benefit of caching each of your objects.  For a given object, if
    the number of hits is less than or not much greater than the number
    of misses, you probably need to re-evaluate how that object is
    cached.

   Caveats

    You should generally not cache the following with RAM Cache Manager:

    * Images 
  
    * Files

    * Complete web pages

    Although Zope does not prevent you from doing so, 
    it generally does not make sense to associate any of these objects
    with a RAM cache manager.  The cache will simply not cache image or 
    file data, since the data is already available in RAM.  
 
    In addition, be careful with complete web pages.
    The problem is that most cacheable objects will cache only their
    return value; important out-of-band information such as the HTTP
    response code is typically not cached. For example, if you cache 
    a page which calls RESPONSE.redirect(), a client that gets
    a cache hit will see an HTTP 200 response code instead
    of the redirect.  
  
    For all of the above objects, another kind of cache manager, an 
    *accelerated HTTP cache manager*, is available and more suitable. 


