django视图缓存的实现
django视图缓存的实现
1,安装
pip install django-redis
setting.py
CACHES = { "default":{ "BACKEND":"django_redis.cache.RedisCache", "LOCATION":"redis://127.0.0.1:6379/1", "OPTIONS":{ "CLIENT_CLASS":"django_redis.client.DefaultClient" } } }
2.视图函数中使用缓存
from django.utils.decorators import method_decorator from django.views.decorators.cache import cache_page class ArticleView(View): @method_decorator(cache_page(60 * 15)) def get(self,request):
return render(request, 'article/index.html', context=context)
注意:
给视图添加缓存是有风险的,如果视图所展示的网页中有经常动态变动的信息,那么被添加缓存命不可取。
缓存整个视图最实用的场景应该是这个视图所展示的网页的内容基本上不怎么变动,或者说在很长一段时间内不需要变动,这样使用缓存就非常有效。
3.URLconf中使用缓存
上面说了函数视图使用缓存,但是我们可能还有一种场景,那就是多个 URL 指向同一个函数视图,但是我只想缓存一部分的 URL,
这时候就可以采用在 URLconf 中使用缓存,这样就指定了哪些 URL 需要缓存。
下面分别表示了函数视图和类视图的路由中使用缓存的方式,基本一致:
from django.views.decorators.cache import cache _page urlpatterns = [ url(r'^foo/([0-9]{1,2})/$',cache_page(60 * 15)(my_view)), url(r'^$', cache_page(60 * 30)(IndexView.as_view()), name='index'), ]
4,模板中使用缓存(推荐)
模板中使用缓存是我比较推荐的一种缓存方式,因为使用这种方式可以充分的考虑缓存的颗粒度,细分颗粒度,可以保证只缓存那些适合使用缓存的 HTML 片段。
具体的使用方式如下,首先加载 cache 过滤器,然后使用模板标签语法把需要缓存的片段包围起来即可。
{% load cache %}
{% cache 500 ‘cache_name’ %}
<div>container</div>
{% endcache %}
下面这些时候可以用缓存:
- 纯静态页面
- 读取了数据库信息,但是不经常变动的页面,比如文章热门排行榜,这个调用数据库信息并且还要排序的完全可以使用缓存,因为不需要实时展现最新的
- HTML 的片段,比如整个页面都经常变动,但是有个侧边栏不经常变动,就可以缓存侧边栏
- 需要使用复杂逻辑生成的 HTML 片段,使用缓存可以减少多次重复操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现