2012-08-13 45 views
0

使用Django和Memcached,我有一系列我想使其無效的緩存。我一直保存它們到唯一的版本號,所以我可以使它們無效。但是,按照Django站點的指示,我收到一個ValueError錯誤。根據使用memcached的版本使緩存無效

我的版本號看起來像這樣:20991791.所以整數,一般來說。

如何使版本20991791中的所有memcache密鑰無效?

僅供參考,設置如下:

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

通過只知道版本號爲「3」我需要刪除的版本號三位全鍵。我認爲incr_version做到了這一點,但是當我嘗試時,它會給出一個值得的錯誤。

>>> 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 
+0

刪除可刪除特定版本與['cache.delete(「笑」,版本= 3)']( https://github.com/django/django/blob/master/django/core/cache/backends/memcached.py#L68)。 'cache.incr_version('laugh')'只會自動碰撞版本,而不會使任何以前的版本失效 - afaik。另外請注意,這是一個鍵,而不是作爲參數傳遞的版本號 – 2012-08-13 23:37:21

回答

0

沒有好辦法做到這一點。在memcached FAQ有一個可能的解決方案。

而且可以使用緩存後端有圖案的支持,django-redis例如,用圖案"{KEY_PREFIX}:{VERSION}:*"