skip to navigation
skip to content

eea.cache 7.0

Tools and config for memcache related caching

Latest Version: 8.1


This package combines the features from lovely.memcached and plone.memoize.ram. It provides a decorator and utility for Memcaches at EEA. The decorator allows you set dependencies known by eea.cache


This add-on doesn’t do anything by itself. It needs to be integrated by a developer within your own products. For reference you can check the package.

Main features

  1. Extends and overrides plone.memoize cache adapters to work with memcache
  2. Provides an extended @cache decorator that supports:
    • cache lifetime override per method
    • dependencies string in order to bulk invalidate cache
    • auto-invalidation of cache when ObjectModifiedEvent is triggered
  3. Possibility to manually invalidate cache via URL.


  • Add eea.cache to your eggs and zcml section in your buildout and re-run buildout:

    eggs =
    zcml =
  • You can download a sample buildout from

  • Install eea.cache within Site Setup > Add-ons

  • Start memcache:

    $ bin/memcached start

Source code

Latest source code (Zope 2 compatible):

Cache decorator

>>> def key(method, self):
...     return method.__name__

>>> from eea.cache import cache
>>> @cache(key, dependencies=["frontpage"])
... def myMethod(num):
...     return num*num

Lets clear any running memcache:

>>> from eea.cache.event import InvalidateCacheEvent
>>> from zope.event import notify
>>> notify(InvalidateCacheEvent(raw=True, dependencies=['frontpage']))

Our myMethod will now be cached with the key returned from the method ‘key’ and with dependency ‘frontpage’:

>>> myMethod(2)
>>> myMethod(3)

>>> notify(InvalidateCacheEvent(raw=True, dependencies=['frontpage']))
>>> myMethod(3)

Cache lifetime

By default your content is cached in memcache for one hour (3600 seconds). You can change this by adding an int property within: ZMI > portal_properties > site_properties called memcached_defaultLifetime and set it’s value to 86400 (one day) for example.

Cache lifetime override per key

Starting with eea.cache 5.1 you can also pass a lifetime key with the duration in seconds which will override the defaultLifetime either given from the portal property or the default one from lovely.memcached of 3600 seconds:

ex: in order to cache the result only for 4 minutes
>>> @cache(key, dependencies=["frontpage"], lifetime=240)
... def myMethod(num):
...     return num*num

Invalidate cache

If you use cache decorator for BrowserView methods or directly on Zope objects methods cache will be automatically invalidated when object is modified (ObjectModifiedEvent is triggered):

>>> from Products.Five.browser import BrowserView

>>> class XXX(BrowserView):
...     @cache(key)
...     def title(self):
...         return self.context.title_or_id()

You can disable auto invalidation by providing the auto_invalidate param to @cache decorator:

>>> @cache(key, auto_invalidate=False)
... def title(self):
...     return self.context.title_or_id()


In order to manually invalidate memcached cache per object this package provides a browser view called memcache.invalidate. It will invalidate all memcached methods associated with current object’s UID:


You can also manually invalidate related items and back references:



By default this method can be called by users with these roles:

  • Editor
  • CommonEditor
  • Owner
  • Manager


In order to manually invalidate cache (memcached and varnish) per object this package provides a browser view called cache.invalidate. It will call memcache.invalidate and also notify Purge event for varnish:


You can also manually invalidate related items and back references:



By default this method can be called by users with these roles:

  • Editor
  • CommonEditor
  • Owner
  • Manager

Funding and project management

EEA - European Environment Agency (EU)


7.0 - (2014-08-27)

  • Upgrade step: Within “Plone > Site setup > Add-ons” install EEA Cache [voineali refs #20678]
  • Pre-upgrade-step: Also add eea.cache within buildout zcml directive before eea.cache-overrides [voineali refs #20678]
  • Feature: Added a browser view called cache.invalidate that allows editors to manually invalidate cache (including varnish and memcache). It also supports invalidation for related-items and back-references [voineali refs #20678]
  • Feature: Added a browser view called memcache.invalidate that allows users to manually invalidate memcache. It also supports invalidation of relatedItems and back-references memcache [voineali refs #20678]
  • Change: Auto-invalidate all cache associated with current object’s UID when ObjectModifiedEvent is triggered [voineali refs #20678]

6.3 - (2014-01-21)

  • Bug fix: removed wrongly added blockquotes within README.rst [ichim-david refs #18064]
  • Feature: adding Sphinx-generated documentation in Page Template format [batradav refs #9502]

6.2 - (2013-10-04)

  • Change: updated zope imports with the versions that require minimum Plone 4.1 for eea.cache [ichimdav refs #15651]

6.1 - (2013-06-17)

  • Cleanup: Use logger.debug instead of for debug messages [avoinea]

6.0 - (2013-05-20)

  • Feature: Removed lovely.memcached dependency [voineali refs #14343]

5.1 - (2013-02-04)

  • Feature: added information for contributors [ciobabog refs #13892]
  • Feature: added ability to pass a lifetime key to the cache decorator in order to cache it for a determined period different from the default lifetime [ichimdav #13677]
  • Upgrade step: (optional) Within ZMI > portal_properties > site_properties add an int property called memcached_defaultLifetime and set it’s value to 86400 (one day) or any value that fits your needs.
  • Feature: Ability to set memcached default lifetime, which by now was hardcoded to one hour (3600 seconds) [voineali refs #13677]

5.0 - (2012-10-08)

  • Change: Updated README and egg’s metadata [voineali refs #5434]

4.3 - (2012-07-13)

  • Bug fix: fixed markup of HISTORY.txt file [ciobabog refs #5231]

4.2 - (2012-02-06)

  • no changes

4.0 - (2011-11-07)

  • Feature: Plone 4.x compatible release [ghicaale #4309]

0.3 - (2010-11-22)

  • Bug fix: fixed tests namespace in order to be used within hudson [voineali #3821]

0.2 - (2010-11-10)

  • Bug fix: added fake memcache client in order to fix broken doctests [voineali]

0.1 - (2009-11-10)

  • Initial release
File Type Py Version Uploaded on Size (md5) Source 2014-08-28 118KB