Django中的缓存的配置与使用
一、使用装饰器
在文件开头导入下面代码,然后在函数上方添加缓存的装饰器
from django.views.decorators.cache import cache_page 一:在视图View中使用 cache_page 【整个视图缓存】 @cache_page(30) def my_view(request) 二:在路由URLConf中使用 cache_page urlpatterns = [path('/path, cache_page(60)(my_view)')]
# 方式一:使用caches['CACHES配置key'] 导入具体对象 from django.core.cache import caches cache1 = caches['user'] cache2 = caches['pwd'] # 方式二:相当于直接引入CACHES配置项中的'default'项 from django.core.cache import cache cache.set(key,value,timeout) 存储缓存 key:缓存的key value:Python对象 timeout:缓存存储的时间(s),默认为CACHES中的TIMEOUT值 cache.get(key) 取缓存,没有数据返回None key:缓存的key cache.add(key,value) 存储缓存,只要可以不在时生效返回值是Bool cache.get_or_set(key,value,timeout) 如果未获取到数据,则执行set操作 cache.set_many(dict,timout) 批量存储数据 dict:key和value的字典 timout:存储时间 返回值:插入不成功的key的数组 cache.delete(key) 删除key的缓存数据,返回值None cache.delete_many(key_list) 批量删除,返回值None
二、原生缓存
redis缓存
首先要安装django-redis
pip install django-redis 配置 settings.py django项目的缓存配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", # 引擎 # redis服务器的ip地址及端口号,及数据库序号,redis一共有15个数据库 0~15 "LOCATION": "redis://127.0.0.1:6379/1", # "LOCATION": "redis://:passwordpassword@47.193.146.xxx:6379/0", # 如果redis设置密码的话,需要以这种格式进行设置,host前面是密码 "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient" } } }
数据库缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 引擎 'LOCATION': 'my_cache_table', # 数据库表名(名字是自己取的) 'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期) 'OPTIONS':{ 'MAX_ENTRIES': 300, # 最大缓存个数(默认300) 'CULL_FREQUENCY': 3, # 缓存条数到达最大值时,删除1/X的缓存数据 }, } }
本地内存缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', #这个参数指定变量名必须唯一 } }
文件缓存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': r'c/xxx', #缓存内容存放的文件夹路径 } }
开发调试缓存
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) }, } }