首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时删除django中的缓存条目

何时删除django中的缓存条目
EN

Stack Overflow用户
提问于 2012-11-11 15:51:40
回答 1查看 196关注 0票数 0

在我的django应用程序中,我有一个属于某个CategoryBlogEntry .A BlogEntry可能属于多个Category

代码语言:javascript
复制
class BlogEntry(models.Model):
    creationdate=models.DateField(default=date.today)    
    description=models.TextField()
    author=models.ForeignKey(User,null=True)
    categories=models.ManyToManyField(Category)

class Category(models.Model):
    name=models.CharField(unique=True,max_length=50)
    description=models.TextField(blank=True)

用户可以编辑BlogEntry,并且在这样做时,可以移除它所在的Category

假设blogEntry1属于java,scala,在.If用户编辑它之前,他删除了scala.Now,条目只有一个类别,即java

在我的list_view中,我使用缓存,如下所示

代码语言:javascript
复制
from django.core.cache import cache
def list_entries_on_day(request,year,month,day):
    ...
    key = 'entries_day'+'-'+year+'-'+month+'-'+day
    if key not in cache:
        entries = BlogEntry.objects.filter(...args..)
        cache.set(key,entries)
    entries_on_day =cache.get(key)
    ...

假设我为今天创建了2个条目,这些条目放在cache.If中,我编辑其中一个BlogEnty,并删除一个类别ie;

代码语言:javascript
复制
blogEntry1  has categories :java,scala
blogEntry2 has categories :dotnet,vbasic

最初,我查询今天的条目,并将结果放在缓存中

缓存现在具有针对关键'entries_day-2012-11-11'[blogEntry1,blogEntry2]

现在,我对blogEntry1进行了编辑,使其类别为java

,我需要从缓存中删除存储的条目吗?(因为缓存在修改之前包含一个BlogEntry对象)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-11 18:49:50

可以通过为model.save注册信号处理程序来使高速缓存无效

你也可以接受这样一个事实,即用户将看到过时的内容,直到缓存过期(默认1小时),确保他登录的用户将不会看到缓存的内容,否则他将按喇叭编辑丢失。

嗯,我的回答有点含糊,但我只是想说:不,你不必严格地在每次编辑时都使缓存无效,这是在性能和内容新鲜度之间的选择。

另一个nit:缓存使用的首选习惯用法是:

代码语言:javascript
复制
entries_on_day = cache.get(key)
if entries_on_day  is None:
    entries_on_day  = BlogEntry.objects.filter(...args..)
    cache.set(key,entries_on_day)

您可以保存一个缓存查询

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13329484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档