浅谈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中的zip函数使用示例
Jan 29 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
Python装饰器实现方法及应用场景详解
Mar 26 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
分享一个python的aes加密代码
Dec 22 Python
Django 如何实现文件上传下载
Apr 08 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实现的九九乘法口诀表简洁版
2014/07/28 PHP
php while循环控制的简单实例
2016/05/30 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
PHP类的特性实例分析
2016/09/28 PHP
Symfony查询方法实例小结
2017/06/28 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
JavaScript 密码强度判断代码
2009/09/05 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
JS实现的点击表头排序功能示例
2017/03/27 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
django的model操作汇整详解
2019/07/26 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
Python 中如何写注释
2020/08/28 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
英国网上超市:Ocado
2020/03/05 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
法律顾问服务方案
2014/05/15 职场文书
火箭队口号
2014/06/18 职场文书
车辆转让协议书
2014/09/24 职场文书
社会实践活动总结
2015/02/05 职场文书
道歉的话语大全
2015/05/12 职场文书
卡特教练观后感
2015/06/08 职场文书
开票证明
2015/06/23 职场文书
小程序wx.getUserProfile接口的具体使用
2021/06/02 Javascript
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫