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>
View Code
第三种,对整个网站都使用缓存(需要用中间件)
修改setting的MIDDLEWARE,
- 开头添加:'django.middleware.cache.UpdateCacheMiddleware' # 这个中间件只有process_response
- 结尾添加:'django.middleware.cache.FetchFromCacheMiddleware' # 这个中间件只有process_request
缓存流程:当请求进来通过中间件,到达最后一个request进行缓存查找,如果不存在则进行函数执行,完成后数据进行返回执行
response,response返回执行到最后一个response的时候,检查缓存是否存在,不存在就进行缓存并返回给用户。
应用的优先:全站最高-》视图函数-》局部缓存最低(是根据请求生命周期可以分析出)