注意事项
django==1.9对django-redis不支持
全局缓存
# 在settings中配置,主要就是两个中间件,需要注意的就是两个中间件的前后位置
MIDDLEWARE_CLASSES = (
‘django.middleware.cache.UpdateCacheMiddleware’, #第一
'django.middleware.common.CommonMiddleware',
'CACHE_MIDDLEWARE_SECONDS=10', # 以秒为单位,缓存事件
‘django.middleware.cache.FetchFromCacheMiddleware’, #最后
)
单页面缓存
# 不需要在settings中配置,只在需要在需要缓存页面的视图函数上加装饰器
from django.views.decorators.cache import cache_page
import time
# 装饰器加载视图函数上即可,括号中的数字为缓存时间,以秒为单位
5) (
def time(request):
ctime = time.time()
return render(request,'time.html',locals())
页面局部缓存
1、settings中redis中的配置
# 配置两个缓存,默认的及redis
CACHES = {
# django-redis默认进入的cache缓存
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'OPTIONS': {
'MAX_ENTRIES': 1000,
}
},
# 配置的redis缓存
"redis": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
2、views中路由案例
from django.core.cache import cache
from django.core.cache import caches
def index(request):
# ['redis']是选择的缓存库,为redis缓存库
# set向cache中填内容,参数为key,value,timeout
# timeout=0 立即过期,timeout=None 永不过期,30*60过期时间为30分钟
caches['redis'].set('names', 'kobe', 30 * 60)
# 默认的cache库
cache.set('names', 'kobe', 30 * 60)
# 缓存中取内容
t = cache.get('names')
# ttl 任何有超时设置的 key 的超时值
cache.ttl("foo")
# key为foo的值永久存
cache.persist("foo")
# key为foo指定一个新的过期时间
cache.expire("foo", timeout=5)
# 获取cache中所有以foo_为开头的key
cache.keys("foo_*")
# 删除cache中所有以foo_为开头的key
cache.delete_pattern("foo_*")
return HttpResponse(t)
# django-redis 支持 redis 分布式锁. 锁的线程接口是相同的, 因此你可以使用它作为替代.
# 使用 python 上下文管理器分配锁的例子:
with cache.lock("somekey"):
do_some_thing()
django-redis缓存配置
django