在django中使用缓存进行比较和设置

时间:2012-11-14 05:43:03

标签: python django google-app-engine caching

我遇到了一个视频,它解释了多个用户同时覆盖缓存的问题。发言者建议使用比较和设置来对抗此问题(http://www.udacity.com/wiki/CS253%20Unit%206?course=cs253#cas)。

他提到了两种方法

gets(key) → value, unique
cas(key, value, unique) → True/False

from google.appengine.api import memcache

val, unique = memcache.gets(key)
r = memcache.cas(key, newval, unique)
while r == False:
    unique, val = memcache.gets(key)
    r = memcache.cas(key, newval, unique)

django cache中是否提供此类内容?或者这是googleappengine具体的吗? 。有人建议如何使用django cache

来完成

1 个答案:

答案 0 :(得分:1)

如果您使用的是通用Django缓存框架,则无法实现。如果您只使用MemCache,this question on Django Memcache: Compare and Set包含您所需要的一切。

但是,请注意,虽然CAS解决了多个用户设置相同缓存值的问题,但这只是高流量环境中的问题。如果每月同时发生一次或两次缓存缺失和更新,那么最好忽略CAS。

如果计算的缓存值实际上非常昂贵,您还可以考虑单独的后台任务来计算结果,将其存储在缓存中,并在缓存到期之前运行。在这种情况下,您的用户永远不会遇到缓存未命中,并且整个CAS问题变得无关紧要。