2012-11-11 28 views
0

緩存條目在我的Django應用程序,我有一個BlogEntry屬於一個Category。一個BlogEntry可能屬於很多Category小號何時刪除在Django

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。如果用戶編輯之前,這樣他刪除scala。現在進入只有一個類別,即java

在我list_view我使用緩存如下

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 S的一個,並刪除類別 即;

blogEntry1 has categories :java,scala 
blogEntry2 has categories :dotnet,vbasic 

起初我爲今天條目的查詢,並把結果緩存

緩存現在有[blogEntry1,blogEntry2]對關鍵'entries_day-2012-11-11'

現在我編輯blogEntry1,使得它現在有java

類別

,我需要從緩存中刪除存儲的條目嗎?(由於緩存在修改之前包含一個BlogEntry對象)

回答

1

您可以通過註冊一個信號處理程序model.save

您也可以住在一起的事實,用戶會看到陳舊的內容,直到緩存過期(1個小時默認值)緩存失效確保他登錄的用戶不會看到緩存的內容,否則他會鳴叫編輯丟失。

嗯,我的答案有點含糊,但我只是想說:不,你不必在每次編輯時使緩存失效,這是性能和內容新鮮度之間的選擇。

一個更加挑剔:緩存用途的首選成語是:

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) 

您保存一個緩存查詢