浅谈django三种缓存模式的使用及注意点


Posted in Python onSeptember 30, 2018

django是动态网页,一般来说需要实时的生成访问的页面,展示给访问者,这样,内容可以随时变化,也就说请求到达视图函数之后,然后进行模板渲染,将字符串返回给用户,用户会看到相应的html页面。但是如果每次请求都从数据库中请求并获取数据,并且当用户并发量十分大的时候,这将服务器性能将大大受到影响。因此使用缓存能有效的解决这类问题。如果能将渲染后的结果放到速度更快的缓存中,每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,节省取数据和渲染的时间,不仅能大大提高系统性能,还能提高用户体验。

缓存的适合场景

对页面实时性要求不高的页面。对于大多数的购物网站,短期内商品的描述是没有变化的,可以使用缓存。

缓存优先级

由django的生命周期知各级缓存的优先级:中间件应用的全局缓存>视图函数缓存>模板渲染下的局部视图使用缓存。

Django 缓存模式的使用(主要针对RestFul设计模式的项目)

有三种模式:

全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用缓存) 局部视图缓存模式

第一种:实现方式:

必须在 settings中设置 缓存中间件

MIDDLEWARE = [
 'django.middleware.cache.UpdateCacheMiddleware',
  。。。其他中间件。。。
 'django.middleware.cache.FetchFromCacheMiddleware',
]

但是伴随的缺点就是 没有设置 缓存的接口默认都会有600秒的缓存,如下

浅谈django三种缓存模式的使用及注意点

无论清缓存还是换浏览器,因为缓存都是放在服务端的。

这就导致 那些不需要设置缓存,要求数据实时性较高的接口无法及时返回最新数据。

所以:

如果需要使用

from django.views.decorators.cache import cache_page, cache_control
from django.views.decorators.vary import vary_on_headers

@cache_control,@vary_on_headers,@vary_on_cookie

这些装饰器,就必须需要 缓存中间件,但是这样会导致其他接口都会有缓存600秒,需要慎重考虑使用

第二种:

from django.views.decorators.cache import cache_page
@cache_page(10)

def cac(request):

 .......

这种方式只针对一个接口使用缓存(个人倾向于使用此方式)

第三种:

涉及到模板的使用(具体没有研究过):

浅谈django三种缓存模式的使用及注意点

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python群发邮件实例代码
Jan 03 Python
Python读取键盘输入的2种方法
Jun 16 Python
python实现多线程的两种方式
May 22 Python
Python类的继承和多态代码详解
Dec 27 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
对python pandas读取剪贴板内容的方法详解
Jan 24 Python
详解Python打包分发工具setuptools
Aug 05 Python
Python 求数组局部最大值的实例
Nov 26 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
Python控制台实现交互式环境执行
Jun 09 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
使用Python实现租车计费系统的两种方法
Sep 29 #Python
Python实现App自动签到领取积分功能
Sep 29 #Python
10个Python小技巧你值得拥有
Sep 29 #Python
实例分析python3实现并发访问水平切分表
Sep 29 #Python
3个用于数据科学的顶级Python库
Sep 29 #Python
使用Python机器学习降低静态日志噪声
Sep 29 #Python
python实现字符串和字典的转换
Sep 29 #Python
You might like
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
浅谈php7的重大新特性
2015/10/23 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
javascript时间函数大全
2014/06/30 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
Angular实现form自动布局
2016/01/28 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
python tkinter窗口最大化的实现
2019/07/15 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
劳资人员岗位职责
2013/12/19 职场文书
初三家长会邀请函
2014/01/18 职场文书
政府门卫岗位职责
2014/04/29 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
故意伤害辩护词
2015/05/21 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS