为了账号安全,请及时绑定邮箱和手机立即绑定

使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 关注
  • 678 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信