具有可选持久缓存的简单对象/方法结果缓存。支持内存文件或Redis作为存储
项目描述
为您的对象提供简单的缓存。在内存中存储对象的副本(或将它们序列化到文件中)并返回该对象的副本。函数参数是缓存键。
>>> from object_cacher import ObjectCacher >>> @ObjectCacher(timeout=5) ... def test(*args): ... print ('Real call') ... return args ... >>> test(1,2,3) Real call (1, 2, 3)>>> test(1,2,3) (1, 2, 3)>>> test(1,2,3,4) Real call (1, 2, 3, 4)>>> test(1,2,3,4) ... (1, 2, 3, 4)
为难以计算的功能或方法创建缓存。例如,您有一个远程RESTful API,其中包含许多字典。您可以将其缓存
>>> from urllib import urlopen >>> from object_cacher import ObjectCacher >>> @ObjectCacher(timeout=60) ... def get_api(): ... print "This real call" ... return urlopen('https://api.github.com/').read() ... >>> get_api() This real call '{"current_user_url":"https://api.github.com/user", ...' >>> get_api() '{"current_user_url":"https://api.github.com/user", ...'
结果,您只进行了一次HTTP请求。
对于方法,您可以使用它如下
>>> from urllib import urlopen >>> from object_cacher import ObjectCacher >>> class API(object): ... @ObjectCacher(timeout=60, ignore_self=True) ... def get_methods(self): ... print "Real call" ... return urlopen('https://api.github.com/').read() ... >>> a = API() >>> a.get_methods() Real call '{"current_user_url":"https://api.github.com/user", ...' >>> b = API() >>> b.get_methods() '{"current_user_url":"https://api.github.com/user", ...'
如果设置了ignore_self参数,则缓存将由所有实例共享。否则,实例的缓存将分开。
您还可以使用持久缓存。ObjectPersistentCacher类装饰器创建基于文件的pickle序列化缓存存储。当您想要在重新运行后保持缓存时,您必须确定缓存ID
>>> from urllib import urlopen >>> from object_cacher import ObjectCacher >>> class API(object): ... @ObjectPersistentCacher(timeout=60, ignore_self=True, oid='com.github.api.listofmethods') ... def get_methods(self): ... print "Real call" ... return urlopen('https://api.github.com/').read() ... >>> a = API() >>> a.get_methods() Real call '{"current_user_url":"https://api.github.com/user", ...' >>> b = API() >>> b.get_methods() '{"current_user_url":"https://api.github.com/user", ...'
这样,您就可以在重新运行后保留缓存。
您可以通过更改‘CACHE_DIR’类属性来更改ObjectPersistentCacher的缓存目录。
>>> ObjectPersistentCacher.CACHE_DIR = '/var/tmp/my_cache'
安装
您可以从PyPI安装
pip install object_cacher
或手动
python setup.py install