亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使Django中的視圖緩存過期?

使Django中的視圖緩存過期?

守著星空守著你 2019-09-24 11:00:02
該@cache_page decorator真棒。但是對于我的博客,我希望將頁面保留在緩存中,直到有人發表評論。這聽起來像是個好主意,因為人們很少評論,因此將頁面保留在內存緩存中,而沒人評論會很好。我以為有人以前一定有這個問題?這與每個URL的緩存不同。因此,我正在考慮的解決方案是:@cache_page( 60 * 15, "blog" );def blog( request ) ...然后,我將保留用于博客視圖的所有緩存鍵的列表,然后使“博客”緩存空間過期。但是我對Django并沒有超級的經驗,所以我想知道是否有人知道這樣做的更好方法?
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

我為這種情況編寫了Django-groupcache(您可以在此處下載代碼)。就您而言,您可以這樣寫:


from groupcache.decorators import cache_tagged_page


@cache_tagged_page("blog", 60 * 15)

def blog(request):

    ...

從那里,您可以稍后再做:


from groupcache.utils import uncache_from_tag


# Uncache all view responses tagged as "blog"

uncache_from_tag("blog") 

還要看看cache_page_against_model():涉及的更多一些,但是它將允許您根據模型實體的更改自動取消緩存響應。


查看完整回答
反對 回復 2019-09-24
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

使用最新版本的Django(> = 2.0),您正在尋找的東西很容易實現:


from django.utils.cache import learn_cache_key

from django.core.cache import cache

from django.views.decorators.cache import cache_page


keys = set()


@cache_page( 60 * 15, "blog" );

def blog( request ):

    response = render(request, 'template')

    keys.add(learn_cache_key(request, response)

    return response


def invalidate_cache()

    cache.delete_many(keys)

當有人通過pre_save信號更新博客中的帖子時,您可以將invalidate_cache注冊為回調。


查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 709 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號