我遇到了一个视频,它解释了多个用户同时覆盖缓存的问题。发言者建议使用比较和设置来对抗此问题(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
答案 0 :(得分:1)
如果您使用的是通用Django缓存框架,则无法实现。如果您只使用MemCache,this question on Django Memcache: Compare and Set包含您所需要的一切。
但是,请注意,虽然CAS解决了多个用户设置相同缓存值的问题,但这只是高流量环境中的问题。如果每月同时发生一次或两次缓存缺失和更新,那么最好忽略CAS。
如果计算的缓存值实际上非常昂贵,您还可以考虑单独的后台任务来计算结果,将其存储在缓存中,并在缓存到期之前运行。在这种情况下,您的用户永远不会遇到缓存未命中,并且整个CAS问题变得无关紧要。