浅谈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 排列组合之itertools
Mar 20 Python
Pyramid添加Middleware的方法实例
Nov 27 Python
Python中正则表达式的详细教程
Apr 30 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
如何使用python把ppt转换成pdf
Jun 29 Python
Django基础三之视图函数的使用方法
Jul 18 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
Python读取JSON数据操作实例解析
May 18 Python
Python正则表达式如何匹配中文
May 27 Python
Python闭包及装饰器运行原理解析
Jun 17 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世纪万年历
2006/12/06 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
php调用shell的方法
2014/11/05 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
Python实现端口复用实例代码
2014/07/03 Python
Python中的各种装饰器详解
2015/04/11 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python实现公司年会抽奖程序
2019/01/22 Python
python中使用while循环的实例
2019/08/05 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
公司端午节活动方案
2014/02/04 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
深入理解python协程
2021/06/15 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技