浅谈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中的赋值和深浅拷贝
Aug 15 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
python求质数的3种方法
Sep 28 Python
如何实现Django Rest framework版本控制
Jul 25 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
Python原始套接字编程实例解析
Jan 29 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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 可阅读随机字符串代码
2010/05/26 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JavaScript动态添加css样式和script标签
2016/07/19 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
Python函数参数类型*、**的区别
2015/04/11 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python代码中怎么换行
2020/06/17 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
受欢迎的大学生自我评价
2013/12/05 职场文书
食堂员工工作职责
2013/12/18 职场文书
增员口号大全
2014/06/18 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
邓小平文选读书笔记
2015/06/29 职场文书