Hi all,

the zope.app.cache.ram.RAMCache doesn't seem to expire correctly the cached data. If I rightly understand the code, the cache for an object is expired only when another object is inserted into the cache.

I wrote a little test in order to query only the cache.


Set up an object that provide ICacheable and set up a ramcache with the max age set to 1 second::

  >>> from zope import interface
  >>> from zope.app.cache.ram import RAMCache
  >>> from zope.app.cache.interfaces import ICacheable

  >>> ramcache = RAMCache()
  >>> ramcache.update(maxEntries=1000, maxAge=1, cleanupInterval=1)

  >>> class CacheableObject(object):
  ...     interface.implements(ICacheable)
  ...     cacheId = None
  ...     def getCacheId(self):
  ...         return cacheId
  ...     def setCacheId(self, cacheId):
  ...         self.cacheId = cacheId

  >>> cacheable = CacheableObject()

Now I query, set and query again the cache and I got the right behavior::

  >>> data = "my data"
  >>> ramcache.query(cacheable) is None
  >>> ramcache.set(data, cacheable)
  >>> ramcache.query(cacheable) is data

Sleep 2 seconds in order to assure the expiration of the cache::

  >>> import time
  >>> time.sleep(2)
  >>> ramcache.query(cacheable) is data


With Zope-3.2 I got:

Failed example:
    ramcache.query(cacheable) is data

Kind regards,
Marco Andreini
Zope3-dev mailing list
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to