django-缓存的应用
为什么需要缓存?
django中文文档:
通常,计算值是昂贵的(即资源匮乏和缓慢),因此将值保存到可快速访问的缓存中可以有巨大的好处,为下一次需要做好准备。
这是一个足够重要和强大的技术,Django包括一个综合的缓存框架,以及其他较小的缓存功能。
django是动态网页,一般来说需要实时的生成访问的页面,展示给访问者,这样,内容可以随时变化,也就说请求到达视图函数之后,然后进行模板渲染,将字符串返回给用户,用户会看到相应的html页面。但是如果每次请求都从数据库中请求并获取数据,并且当用户并发量十分大的时候,这将服务器性能将大大受到影响。因此使用缓存能有效的解决这类问题。如果能将渲染后的结果放到速度更快的缓存中,每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,节省取数据和渲染的时间,不仅能大大提高系统性能,还能提高用户体验。
缓存的适合场景
对页面实时性要求不高的页面。对于大多数的购物网站,短期内商品的描述是没有变化的,可以使用缓存。
缓存优先级
由django的生命周期知各级缓存的优先级:中间件应用的全局缓存>视图函数缓存>模板渲染下的局部视图使用缓存。
局部视图 使用
在模板的顶端附近加入{% load cache %}以通知模板存取缓存标签。
模板标签{% cache %}在给定的时间内缓存了块的内容。 它至少需要两个参数: 缓存超时时间(以秒计)和指定缓存片段的名称。
{#局部缓存 静态数据缓存#}
{% load cache %}
{#引入TemplateTage#}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>cache</title>
</head>
<body>
{# 小力度细致缓存#}
{% cache 5 c1 %}
{#两个参数: 缓存超时时间(以秒计)和指定缓存片段的名称。 #}
.. sidebar ..
{% endcache %}
</body>
</html>
单独视图缓存 使用
#views.py
from django.views.decorators.cache import cache_page
@cache_page(10)
#参数为缓存失效时间
def cache(request):
pass
全局缓存 配置
#settings.py
from django.middleware.cache import UpdateCacheMiddleware
from django.middleware.cache import FetchFromCacheMiddleware
MIDDLEWARE = [
'django.middleware.cache.UpdateMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.FrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
'django.middleware.cache.UpdateMiddleware',
服务端响应response时作用 查看是否有缓存,如果没有则写入缓存,否则直接返回给客户端
'django.middleware.cache.FetchFormCacheMiddleware',
客户端请求request时作用 查看是否有缓存,如果有不经过views直接返回,否则进入views视图执行函数获取缓存
客户端第一次发出请求是通常是没有缓存的,
因此request请求由中间件FetchForm经过检查没有缓存后进入views
然后response携带缓存到中间件Update后写入缓存,再返回给客户端
django-缓存的应用的更多相关文章
- Django缓存使用方法
Django缓存分为Session和Cookie:Session为放在服务器端的缓存:Cookie为放在客户端(浏览器)的缓存. Session一般用来保存登录会话:Cookie一般用来保存一些个性化 ...
- Django 缓存系统
Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多. 缓存系统工 ...
- drf版本控制 和django缓存,跨域问题,
drf版本控制 基于url的get传参方式 REST_FRAMEWORK={ # "DEFAULT_AUTHENTICATION_CLASSES":["app01.aut ...
- 版本控制,django缓存,跨域问题解决
复习 分页: 1. 简单分页 2. 偏移分页 3. 加密分页 解析器:客户处理前端提交来的数据 urlencode: body体中的数据格式: key=value& formdata编码:为区 ...
- 中间件和Django缓存
中间件定义: 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的请求进行控制 中间件是一类. 看下面的代码在settings里 ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- Django缓存设置
由于Django构建得是动态网站,每次客户端请求都要严重依赖数据库,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...
- [django]django缓存
发现搞了全局缓存后,刷新得不到最新数据了. 还好有过期时间 redis常用: https://www.cnblogs.com/fansik/p/5483060.html django-redis缓存: ...
- Django - 缓存应用
Django缓存应用: https://www.cnblogs.com/zuoshoushizi/p/7850281.html https://www.cnblogs.com/alice-bj/p/9 ...
- Django 2.0 学习(18):Django 缓存、信号和extra
Django 缓存.信号和extra Django 缓存 由于Django是动态网站,所以每次请求均会去数据库进行相应的操作,当程序访问量大时,耗时必然会显著增加.最简单的解决方法是:使用缓存,缓存将 ...
随机推荐
- 【多线程】:Synchronized和ReentrantLock的对比
相同点: 两者都是可重入锁,同一个线程每进入一次,锁的计数器都自增1,等到锁的计数器下降为0时才能释放锁. 底层实现对比: Synchronized是依赖于JVM实现的,而ReentrantLock是 ...
- 解决Fiddler抓不到HTPPS
刚开始启动Fiddler,设置代理后,直接打开浏览器,输入我们最记得的网址“baidu.com”,发现Fiddler什么都抓不到,这是为什么呢?难道是我的配置有问题,重新检查一下,浏览器的代理已经设置 ...
- WIN10安装scrapy/channels等不成功的解决方式
问题 在Win10机器上,不管是安装scrapy还是channels,都需要安装一个包,叫做twisted.正是这个twisted,导致出现一系列的奇葩错误,让我一度以为我的Pycharm坏了,还改了 ...
- Java异常处理设计(二)
考虑对JDK的底层堆栈信息进行处理,一种是重写JDK的Throwable,另一种是在原错误堆栈信息上进行“二次加工”.目前这两种方式我都实现了,效果非常好. 这篇文章主要记录对错误堆栈进行“二次加工” ...
- 【原创】SQL Server 性能调优读书笔记
CPU 100%: 有时可能是硬盘性能不足,或者内存容量不够,让CPU一直忙于I/O. 导致性能问题的一些因素: 用户习惯:在运行尖峰时刻做一些不必做但消耗资源的事情,如之行数据库完整备份,如在服务器 ...
- 修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
在配置MongDB的是时候出现这/lib/ld-linux.so.2问题 [root@localhost local]# /usr/local/mongodb/mongodb/bin/mongod - ...
- Ruby:Open-uri和Net::HTTP的不同
OpenURI不仅可以用来发起http请求,也可以发起https和ftp请求
- Android之apk优化
公司的apk越做越大...作为一个有追求的程序员,我觉得有必要给apk瘦身了... 优化之前,先来分析一下apk结构,下面附上一张apk结构图: apk结构.png 由于我这个项目集成了百度地图.百度 ...
- eclipse maven jdk全局设置
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</acti ...
- [Java初探实例篇02]__流程控制语句知识相关的实例练习
本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...