【问题标题】:Invalidating cache based on version using memcached使用 memcached 使基于版本的缓存无效
【发布时间】:2012-08-10 05:32:02
【问题描述】:

使用 Django 和 Memcached,我有一系列我想使缓存失效的缓存。我一直将它们全部保存为唯一的版本号,以便使它们无效。但是,按照 Django 站点的指示,我得到了一个 ValueError。

我的版本号看起来像:20991791。一般来说是整数。

如何使版本 20991791 中的所有 memcache 键失效?

仅供参考,设置如下:

>>> cache.set('laugh',2,version=3)

只知道版本号“3”,我需要删除版本号 3 中的所有键。我以为 incr_version 是这样做的,但是当我尝试时,它给出了 valueerror。

>>> cache.incr_version(3)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/virtual-envs/govini-web/lib/python2.6/site-packages/django/core/cache/backends/base.py", line 214, in incr_version
    raise ValueError("Key '%s' not found" % key)
ValueError: Key '3' not found

【问题讨论】:

  • 您可以使用cache.delete('laugh', version=3) 删除特定版本。 cache.incr_version('laugh') 只会自动更新版本,不会使任何以前的版本失效-afaik。另外,请注意它是一个键,而不是作为参数传递的版本号

标签: python django memcached


【解决方案1】:

没有很好的方法来做到这一点。 memcached FAQ 有一个可能的解决方案。

您还可以使用支持模式的缓存后端,例如django-redis,并使用模式"{KEY_PREFIX}:{VERSION}:*" 删除

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2010-09-20
    相关资源
    最近更新 更多