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
Note
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 eea.app.visualization package.
If you are using zc.buildout and the plone.recipe.zope2instance recipe to manage your project, you can do this:
Update your buildout.cfg file:
parts +=
libevent
memcached
memcached-ctl
effective-user = zope-www
[instance]
...
eggs =
...
eea.cache
zcml =
...
eea.cache-overrides
[libevent]
recipe = zc.recipe.cmmi
url = http://www.monkey.org/~provos/libevent-1.4.8-stable.tar.gz
[memcached]
recipe = zc.recipe.cmmi
url = http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz
extra_options = --with-libevent=${libevent:location}
[memcached-ctl]
recipe = lovely.recipe:mkfile
path = ${buildout:bin-directory}/memcached
mode = 0755
content =
#!/bin/sh
export LD_LIBRARY_PATH=${libevent:location}/lib
PIDFILE=${memcached:location}/memcached.pid
case "$1" in
start)
${memcached:location}/bin/memcached -d -u ${buildout:effective-user} -P $PIDFILE
;;
stop)
kill `cat $PIDFILE`
;;
restart|force-reload)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
Re-run buildout, e.g. with:
$ bin/buildout -c buildout.cfg
Restart memcache and Zope:
$ bin/memcached restart
$ bin/instance restart
>>> 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)
4
>>> myMethod(3)
4
>>> notify(InvalidateCacheEvent(raw=True, dependencies=['frontpage']))
>>> myMethod(3)
4
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.
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
The Initial Owner of the Original Code is European Environment Agency (EEA). All Rights Reserved.
The eea.cache (the Original Code) is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
More details under docs/License.txt
EEA - European Environment Agency (EU)