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

2018-04-19 09:26:24 +08:00
 Hopetree

先说一下我的现状吧,我刚在自己的博客网站加的 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'),

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

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

3103 次点击
所在节点    Django
4 条回复
JasperYanky
2018-04-19 09:42:04 +08:00
颗粒度再细点 看看 Template fragment caching
jingniao
2018-04-19 19:01:36 +08:00
缓存,针对的应该是某种程度上可以静态的内容
包含可变内容,就不应该缓存。
个人博客站点,前台可以缓存,然后将后台放出来
wangyongbo
2018-04-22 22:33:12 +08:00
Hopetree
2018-04-23 08:50:21 +08:00
@wangyongbo 恩,我之前看文档的时候是仔细看过这个部分的内容,也想过使用这种方式来缓存,但是我后来看了缓存的颗粒度细化的东西之后觉得还是应该把缓存细化一点,不应该整个页面去缓存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/448031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX