我正在使用memcached作为后端的站点范围缓存.我想在底层数据库对象更改时使缓存中的页面无效.
如果页面名称发生更改,那么我将使整个缓存无效(因为它会影响每个页面上的导航.笨拙但足以满足我的需求.
如果只是页面内容发生了变化,那么我想使该页面的缓存无效.
是否有捷径可寻?
我没有用Django做很多缓存,但我想你想要的是什么signals
.
您可以post_save
在基础对象上设置信号,并使回调函数使缓存中的该页无效.
from django.core.signals import post_save from django.core.cache import cache def invalidate_cache(sender, **kwargs): # invalidate cache cache.delete(sender.get_absolute_url()) # or any other pertinent keys post_save.connect(invalidate_cache, sender=UnderlyingModel)
这应该在更新时正确地从缓存中删除该项.