V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Hopetree
V2EX  ›  Django

关于 django 缓存的问题,到底该怎么选择缓存的内容

  •  
  •   Hopetree ·
    Hopetree · 2018-04-19 09:26:24 +08:00 · 3066 次点击
    这是一个创建于 2170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说一下我的现状吧,我刚在自己的博客网站加的 django-redis 作为缓存,当然,这个跟自带的的缓存的使用无差别,所以不讨论 redis 的问题。然后我把缓存都用在的视图和 url 中,如下 2 中方式:

    @cache_page(60 * 60 * 24)
    def useragent_view(request):
        return render(request, 'tool/useragent.html')
    

    然后如果是类视图的话,我是把缓存的方式放到 url 中,如下:

    url(r'^tag/(?P<slug>[\w-]+)/$', cache_page(60 * 60 * 2)(TagView.as_view()), name='tag'),
    

    本身我这种用法是没错的,缓存是的确生成了,但是,我发现有很大的问题,因为我的所有的页面都有一个导航栏,而在导航上面是有登录和登出按钮的,而我设置的缓存都是缓存整个页面,所以导致的问题就是用户明明是登录状态,但是有的页面显示登录了,有的页面显示没有登录(没有显示登录的页面无法新登录),反正问题就出在了导航栏的用户登录上面。

    其实我能理解这种问题,毕竟我缓存的是整个页面,所以导航栏也是其中的一部分,因此会造成显示上面的问题,我想到的解决办法是吧缓存的方式改成在模板中去缓存,或者把要读取数据库信息的内容缓存在自己创建的标签函数中,请问还有别的方式吗?

    4 条回复    2018-04-23 08:50:21 +08:00
    JasperYanky
        1
    JasperYanky  
       2018-04-19 09:42:04 +08:00
    颗粒度再细点 看看 Template fragment caching
    jingniao
        2
    jingniao  
       2018-04-19 19:01:36 +08:00 via Android
    缓存,针对的应该是某种程度上可以静态的内容
    包含可变内容,就不应该缓存。
    个人博客站点,前台可以缓存,然后将后台放出来
    wangyongbo
        3
    wangyongbo  
       2018-04-22 22:33:12 +08:00
    Hopetree
        4
    Hopetree  
    OP
       2018-04-23 08:50:21 +08:00
    @wangyongbo 恩,我之前看文档的时候是仔细看过这个部分的内容,也想过使用这种方式来缓存,但是我后来看了缓存的颗粒度细化的东西之后觉得还是应该把缓存细化一点,不应该整个页面去缓存
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3223 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:53 · PVG 21:53 · LAX 06:53 · JFK 09:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.