django的缓存
1、Django缓存作用
1. 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显
2. 缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作
3. 而是直接从内存或者Redis中之前缓存的内容拿到,并返回
2、Django中提供了6种缓存方式
2.1:开发调试缓存
# 开发调试缓存(虽然配置上,但实际没有缓存,还是到数据库取)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎
#注: 下面这些参数时公用的,五种缓存都可以使用
'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
'OPTIONS':{
'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例(3就是1/3)
},
}
}
2.2:内存缓存
# 注:内存缓存本质上就是在内存中维护一个字典,所存储的形式就是字典的键值对组合
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake', #这个参数指定变量名必须唯一
}
}
2.3:文件缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': os.path.join(BASE_DIR,'cache'), #缓存内容存放的文件夹路径
}
}
2.4:数据库缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 数据库表名(名字是自己取的)
}
}
2.5:Memcache缓存 两种
# 注:Memcache缓存有两个模块:python-memcached模块、 pylibmc模块
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', #使用ip加端口连接memcached
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock', #以文件的形式连本地memcached
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [ # memcached天生支持集群
#1 均衡分配
'172.19.26.240:11211',
'172.19.26.242:11211',
#2 调整权重(权重和请求比例成正比)
('172.19.26.240:11211',1),
('172.19.26.242:11211',10),
]
}
}
# 注: pylibmc模块只改变上面'BACKEND'配置为下面样式即可
# 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
3、Django中缓存3种应用
3.1. 页面级别缓存(需要在views.py文件中引入cache_page)
# 1、views.py文件中的处理函数
from django.views.decorators.cache import cache_page
@cache_page(6) #6秒后缓存失效
def cache(request):
import time
ctime = time.time()
return render(request,'cache.html',{'ctime':ctime})
# 2、cache.html文件中内容都会被缓存,5s后才会失效
<body>
<h1>{{ ctime }}</h1> #页面刷新时时间不会时刻变化,5s过后才会变一次
</body>
3.2. 模板级别缓存(直接在cache.html模板文件中指定某个值放入缓存)
{#1 在文件最顶部引入TemplateTag#}
{% load cache %}
<body>
{#2 使用缓存 c1是缓存的key值 #}
{% cache 5 c1 %} {# 将数据缓存5秒 #}
{{ ctime }}
{% endcache %}
</body>
3. 3. 全局缓存(只需要在settings.py中间件配置的首尾各加一条)
注:设置全局缓存后所有页面的模板数据都会应用
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
# 其他中间件...
'django.middleware.cache.FetchFromCacheMiddleware',
]