【问题标题】:Invalidate/prevent memoize with plone.memoize.ram使用 plone.memoize.ram 使 memoize 无效/阻止
【发布时间】:2016-09-08 00:04:32
【问题描述】:

Ive 和 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 调用返回空结果(或引发网络错误)时发生记忆。

查看 plone.memoize 代码,我似乎需要 raise ram.DontCache() 异常,但在此之前,我需要一种方法来调查旧的缓存值。

如何从缓存存储中获取缓存数据?

【问题讨论】:

    标签: plone memoization


    【解决方案1】:

    我把我写的几个代码放在一起...... 它未经测试,但可能会对您有所帮助。

    您可以使用 ICacheChooser 实用程序访问缓存数据。 它的调用方法需要你缓存的函数的虚线名称,在你的情况下

    key = '{0}.{1}'.format(__name__, method.__name__)
    cache = getUtility(ICacheChooser)(key)
    storage = cache.ramcache._getStorage()._data
    cached_infos = storage.get(key)
    

    在 cached_infos 中应该有你需要的所有信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多