整体缓存
整体缓存--------缓存整个页面
- 视图中,使用cache_page
- 路由中,使用cache_page
默认存储在 CACHES>default > LOCATION:‘cache_table’
字段:cache_key , value , expire
#视图中
from django.views.decorators.cache import cache_page
@cache_page(30) #default配置项
def test_view(request):
return render(request,"index.html")
#路由中
path("test_cache/",cache_page(30)(test_view))
select * from cache_table;
局部缓存
局部缓存--------缓存局部数据
哪部分慢,就缓存哪部分
from django.core.cache import caches # settings.py>CACHES
#存入缓存
d = caches["default"]
d.set("name","jack",timeout=30)
#获取缓存数据
name = d.get("name")
#直接导入default 缓存
from django.core.cache import cache #settings.py> CACHES.default
cache.set("key",python_obj,timeout=30) #str/list...
# 在数据库中,过期后不会自动删除
#只有在获取时,检测到过期,才删除数据,并返回None
cache.get("key")
#其他的操作
#cache.add(key,value,timeout)
#增加一个不存在的key, 返回True
#若key已经存在,则执行失败,返回False
#若key已经存在,但过期了,也可以添加,并返回True
#cache.get_or_set(key,value,timeout)
#获取不到,则set
#cache.set_many(dict,timeout)
#cache.get_many(key_list) -->dict
#cache.delete(key) #删除
#cache.delete_many(key_list)
在数据库中,过期后不会自动删除
只有在获取时,检测到过期,库内才删除数据,并返回None
内存缓存
用redis 内存数据库来缓存数据,需要使用django_redis
sudo pip3 install django-redis
然后在settings.py中配置CACHES
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://localhost:6379/1",
"TIMEOUT": 300, #秒
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
#存储session的缓存
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://localhost:6379/2",
"TIMEOUT": 300,
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
#图形验证码
"image_code": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://localhost:6379/3",
"TIMEOUT": 300,
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
#短信验证码
#购物车
#用户浏览记录
}
#设置使用CACHES["session"] 来缓存session数据
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"