2012-09-28 85 views
0

我在我的django項目中緩存了一些模型的一堆查詢。看起來,緩存本身正在工作,但是當我想通過添加一個新的模型對象來進行測試時,我注意到在模型創建之後,查詢列表被更新爲包含新模型,這應該是不正確的,因爲高速緩存超時設置爲1個小時。memcached和django緩存混淆

我們必須等待1小時才能看到新模型?這裏是代碼:

def home(request, filterBy = 'all', sortBy = 'popularity'): 
    if not cache.get('home' + filterBy + sortBy): 
     models = Model.objects.with_rankings(filterBy, sortBy, request) 
     cache.set('home' + filterBy + sortBy, models, 3600) # 1 hour 
    else: 
     models = cache.get('home' + filterBy + sortBy) 

謝謝。

+0

緩存通常是關閉的。你正在運行memcached守護進程嗎? settings.py中的緩存設置是什麼樣子的? –

+0

調試是真實的,緩存被daemonized,雖然。 –

回答

3

請記住,如果緩存中沒有值,則cache.get(key)返回None不爲False或其他任何值。而你沒有檢查它,你只是檢查返回的值是否爲真或不是。空的QuerySet也是錯誤的,可能是你的情況。

應該(也實在是一個緩存得到以內):測試/開發過程中

def home(request, filterBy = 'all', sortBy = 'popularity'): 
    models = cache.get('home' + filterBy + sortBy) 
    if models is None: 
     models = Model.objects.with_rankings(filterBy, sortBy, request) 
     cache.set('home' + filterBy + sortBy, models, 3600) # 1 hour 
+0

此外,作爲一個經驗法則,當緩存中沒有值時,幾乎每個緩存庫都將返回None而不是False。你應該總是閱讀圖書館的文檔,但這是公認的和預期的做法。 –

+0

,但與'not []'或'not 0'相同 – jasisz