浅谈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在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
python实现2048小游戏
Mar 30 Python
微信跳一跳python代码实现
Jan 05 Python
Python实现基于KNN算法的笔迹识别功能详解
Jul 09 Python
python实现简单的文字识别
Nov 27 Python
元组列表字典(莫烦python基础)
Apr 03 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
python怎么自定义捕获错误
Jun 29 Python
如何用python插入独创性声明
Mar 31 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
一个简单实现多条件查询的例子
2006/10/09 PHP
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
模具专业推荐信
2013/10/30 职场文书
竞聘书格式及范文
2014/03/31 职场文书
学生会部长竞聘书
2014/03/31 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
python的变量和简单数字类型详解
2021/09/15 Python
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL