缓存是⼀类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式
在Django中,当⽤户请求到达视图后,视图会先从数据库提取数据放到模板中进⾏动态渲染,渲染后的结果就是⽤户看到的网页。如果⽤户每次请求都从数据库提取数据并渲染,将极⼤降低性能,不仅服务器压⼒⼤,⽽且客户端也⽆法即时获得响应。如果能将渲染后的结果放到速度更快的缓存中,每次有请求过来,先检查缓存中是否有对应的资源,如果有,直接从缓存中取出来返回响应,节省取数据和渲 染的时间,不仅能⼤⼤提⾼系统性能,还能提⾼⽤户体验。
缓存使用场景:缓存主要适⽤于对页面实时性要求不高的页面。存放在缓存的数据,通常是频繁访问的,⽽不会经常修改的数据。
缓存方式:数据库、⽂件、内存、redis等
一、缓存配置
1.1、数据库缓存
settings.py
CACHES = {
'default':{
'BACKEND':'django.core.cache.backends.db.DatabaseCache',
'LOCATION':'my_cache_table',
}
}
数据库缓存需要生成缓存表
python manage.py createcachetable
1.2、文件缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使⽤的引擎
'LOCATION': os.path.join(BASE_DIR, 'chches'), # 指定缓存的路径
'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最⼤缓存记录的数量(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最⼤个数之后,剔除缓存个数的⽐例,即:1/CULL_FREQUENCY(默认3)
}
}
}
1.3、redis缓存
需要安装引擎
pip install django-redis
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache', # 指定缓存类型redis缓存
'LOCATION': 'redis://:123@127.0.0.1:6379/1', # 缓存地址,@前⾯是reids的密码,如果没有则去掉
# 'LOCATION':'redis://127.0.0.1:6379/1', # 没密码
}
}
二、缓存的使用
2,1、视图函数
from django.views.decorators.cache import cache_page
@cache_page(60 * 0.5) #缓存过期时间
def dbcache(request):
return render(request,'index.html',context={'content':77665})
2.2、模板局部缓存
{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% cache 30 'content' %}
{{ content }}
{% endcache %}
</body>
</html>
2.3、全站缓存
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
.....
'django.middleware.cache.FetchFromCacheMiddleware',
]
CACHE_MIDDLEWARE_SECONDS = 20 #设置超时时间20秒
2.4、手动设置缓存
设置缓存cache.set(key,value,timeout)
获取缓存cache.get(key)
def myCache(req):
# 从缓存获取⻚⾯
mycache = cache.get('mycache')
if mycache:
print('⾛缓存了')
html = mycache
else:
print('没⾛缓存')
tem = loader.get_template('mycache.html')
html = tem.render({'con':'缓存测试的模板'})
cache.set('mycache',html,60)
return HttpResponse(html)
三、redis
一些基本指令
redis-cli
启动redis服务器
ping
检测服务器是否启动 PONG就是已经启动
set key value
设置指定 key 的值
get key
获取指定 key 的值