Invalidate/prevent 记忆 plone.memoize.ram
Invalidate/prevent memoize with plone.memoize.ram
我已经使用 Zope 实用程序执行网络进程。
由于结果有一段时间了,我使用plone.memoize.ram
来缓存结果。
MyClass(object):
@cache(cache_key)
def do_auth(self, adapter, data):
# performing expensive network process here
...和缓存函数:
def cache_key(method, utility, data):
return time() // 60 * 60))
但我想防止在 do_auth
调用 returns 空结果(或引发网络错误)时发生记忆。
查看 plone.memoize 代码似乎我需要 raise ram.DontCache()
异常,但在执行此操作之前我需要一种方法来调查旧的缓存值。
如何从缓存存储中获取缓存数据?
我把我写的几个代码放在一起...
未经测试,但可能对您有所帮助。
您可以使用 ICacheChooser 实用程序访问缓存数据。
它的调用方法需要你缓存的函数的点名,在你的情况下
key = '{0}.{1}'.format(__name__, method.__name__)
cache = getUtility(ICacheChooser)(key)
storage = cache.ramcache._getStorage()._data
cached_infos = storage.get(key)
在cached_infos中应该有你需要的所有信息。
我已经使用 Zope 实用程序执行网络进程。
由于结果有一段时间了,我使用plone.memoize.ram
来缓存结果。
MyClass(object):
@cache(cache_key)
def do_auth(self, adapter, data):
# performing expensive network process here
...和缓存函数:
def cache_key(method, utility, data):
return time() // 60 * 60))
但我想防止在 do_auth
调用 returns 空结果(或引发网络错误)时发生记忆。
查看 plone.memoize 代码似乎我需要 raise ram.DontCache()
异常,但在执行此操作之前我需要一种方法来调查旧的缓存值。
如何从缓存存储中获取缓存数据?
我把我写的几个代码放在一起... 未经测试,但可能对您有所帮助。
您可以使用 ICacheChooser 实用程序访问缓存数据。 它的调用方法需要你缓存的函数的点名,在你的情况下
key = '{0}.{1}'.format(__name__, method.__name__)
cache = getUtility(ICacheChooser)(key)
storage = cache.ramcache._getStorage()._data
cached_infos = storage.get(key)
在cached_infos中应该有你需要的所有信息。