django学习之- 数据缓存
5种配置:
开发调试
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
内存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake', # 注意这个必须唯一,相当于变量名
}
}
文件
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
数据库
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 数据库表
}
}
注:执行创建表命令 python manage.py createcachetable
memcache(python-memcache模块)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
('172.19.26.240:11211',10),
('172.19.26.242:11211',11), # 后面的数字代表权重
]
}
}
memcache(pylibmc模块)
通用配置:
'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
'OPTIONS':{
'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
},
'KEY_PREFIX': '', # 缓存key的前缀(默认空)
'VERSION': 1, # 缓存key的版本(默认1)
'KEY_FUNCTION' 函数名 # 生成key的函数(默认函数会生成为:【前缀:版本:key】) 3种应用:全站缓存,views缓存,页面局部缓存
实例:文件缓存
1:添加文件缓存配置到setting中,缓存目录为项目下的cache
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': os.path.join(BASE_DIR,'cache'),
}
}
添加缓存第一种,对views函数添加缓存
在需要添加缓存的函数名上添加装饰器
from django.views.decorators.cache import cache_page
@cache_page(10) # 10表示数据缓存10秒
from django.views.decorators.cache import cache_page
@cache_page(10)
def cache(request):
import time
ctime = time.time()
return render(request,'cache.html',{'ctime':ctime})
第二种,对页面中个别功能进行缓存
第一步在网页的头部第一行添加:{% load cache %}
第二部使用{% cache 500 缓存key %} ....% endcache %}包裹住需要缓存的内容
注意:5000表示缓存超时时间5000秒,
{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ ctime }}
{{ ctime }}
{{ ctime }}
{% cache 10 c1 %}
{{ ctime }}
{% endcache %}
</body>
</html>
第三种,对整个网站都使用缓存(需要用中间件)
修改setting的MIDDLEWARE,
- 开头添加:'django.middleware.cache.UpdateCacheMiddleware' # 这个中间件只有process_response
- 结尾添加:'django.middleware.cache.FetchFromCacheMiddleware' # 这个中间件只有process_request
缓存流程:当请求进来通过中间件,到达最后一个request进行缓存查找,如果不存在则进行函数执行,完成后数据进行返回执行
response,response返回执行到最后一个response的时候,检查缓存是否存在,不存在就进行缓存并返回给用户。
应用的优先:全站最高-》视图函数-》局部缓存最低(是根据请求生命周期可以分析出)
django学习之- 数据缓存的更多相关文章
- Django学习之站点缓存详解
本文和大家分享的主要是django缓存中站点缓存相关内容,一起来看看吧,希望对大家学习django有所帮助. 缓存整个站点,是最简单的缓存方法 在 MIDDLEWARE_CLASSES 中加入 “ ...
- Django学习总结②----关系运算与F,Q关系
关联mysql步骤: 第一步:下载pymysql:pip install pymysql 第二步:在工程目录下的init文件下,将pymysql引入 import pymysql pymysql.in ...
- Django学习之缓存和信号
Django学习之缓存和信号 一 缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views ...
- 【菜鸟学习jquery源码】数据缓存与data()
前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ...
- jQuery源代码学习之六——jQuery数据缓存Data
一.jQuery数据缓存基本原理 jQuery数据缓存就两个全局Data对象,data_user以及data_priv; 这两个对象分别用于缓存用户自定义数据和内部数据: 以data_user为例,所 ...
- 学习Spring Boot:(二十五)使用 Redis 实现数据缓存
前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...
- Django 学习之---缓存系统
一.浏览器缓存机制 Cache-control策略(重点关注) Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务 ...
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]——本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
随机推荐
- 关于获取计算机唯一ID问题
1:CPU序列号,并不是每颗CPU都有一个唯一的序列号,CPU试每种型号一个序列号,其实可以认为是CPU型号号码.PIII以前的计算机没有ID,而且AMD的CPU也没有ID. 创建一个虚拟机,他会重新 ...
- windows 查看某端口被占用情况
百度经验 http://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html 基本命令 netstat -ano
- (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案二
http://blog.csdn.net/yerenyuan_pku/article/details/52894958 前面我们已经集成了Spring4.2.5+Hibernate4.3.11+Str ...
- mysql-mmm 部署高可用集群
集群的部署(mysql-mmm + 主从同步) 什么是集群? 多台服务器提供相同的服务 集群的好处? 节省成本. 配置集群? 准备环境:准备4台数据库服务器 准备服务器,能够ping 4 台数据库服务 ...
- 【牛客小白月赛6】F 发电 - 树状数组&快速幂&逆元
题目地址:https://www.nowcoder.com/acm/contest/136/F 树状数组.快速幂.逆元的模板运用: #include<iostream> #include& ...
- laravel知识点备忘
1.连表查询:select * from goods left join shop on goods.shopid=shop.shopid; DB::table('goods') ->leftJ ...
- python3.x Day6 IO多路复用
IO多路复用import asyncio 这个是异步IO模块 这个还不知道怎么用 select poll epoll 都是IO多路复用 windows 仅支持select linux2.6以后 支持e ...
- CSS--基础结构层叠
权值:通配符*的权值为0,标签和伪元素的权值为1,类选择符,属性选择器或伪类的权值为10,ID选择符的权值为100,内联样式最高为1000.还有一个权值比较特殊--继承也有权值但很低,有的文献提出它只 ...
- terminology(术语)
1.declaration:告诉编译器某个标识符的name和type,同时略去具体细节. extern int x; //对象(object)声明式 std::size_t numDigit ...
- Python面向对象之文件操作
文件的概念 文件的概念和作用 计算机的文件,就是存储在某种长期存储设备上的一段数据:长期存储设备包括:U盘,硬盘,移动硬盘,光盘,等: 文件的作用:将数据长期保存,在需要的时候使用: 文件的存储方式 ...