本文共 2117 字,大约阅读时间需要 7 分钟。
如果不配置缓存,django默认使用local-memory缓存,就本地内存缓存。
用cache-page装饰器做一个视图缓存测试:
@cache_page(60*5)def page_cache(request): time.sleep(5) return HttpResponse('cache_page')
浏览器第一次访问,5秒后返回cache_page,300s内再次访问,会立刻返回结果。
cache-page用的local-memory默认缓存,所以redis中肯定是空的。
127.0.0.1:6379> keys *
(empty list or set)
修改默认缓存为redis:
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }}
再次访问后,查看redis
127.0.0.1:6379> keys *
1) ":1:views.decorators.cache.cache_header..1517a57fc33cb5df12628c4ef1a6cca5.en-us.UTC"
2) ":1:views.decorators.cache.cache_page..GET.1517a57fc33cb5df12628c4ef1a6cca5.d41d8cd98f00b204e9800998ecf8427e.en-us.UTC"
可以看出,redis中已经成功将页面缓存,有两个键。
配置多个缓存,一个默认本地内存缓存,一个redis缓存:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'OPTIONS': { 'MAX_ENTRIES': 1000, } }, "redis": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }}
修改视图:
装饰器中通过cache参数选择使用哪个缓存。
@cache_page(60*10)#使用reids缓存def page_cache(request,cache='redis'):#使用默认的内存缓存#def page_cache(request,cache='default'): time.sleep(5) return HttpResponse('cache_page')
如果使用默认缓存,redis为空,如果使用redis缓存,通过keys * 就能看到键值。
使用The low-level cache api
重写一个视图:
from django.core.cache import cachefrom django.core.cache import cachesimport randomdef muti_cache(request): #res_key=cache.get('res_key') res_key=caches['redis'].get('res_key') #res_key=caches['default'].get('res_key') if not res_key: res_key = random.randint(0,100) cache.set('res_key','cache_key', 300) return HttpResponse(res_key)
导入的cache就是配置的默认缓存,caches相当于全部缓存集
cache=caches['default']
通过caches['redis']选择redis缓存
浏览器第一次访问,返回一个随机数
300秒内再次访问,就会返回缓存设置的cache_key
查看redis已经存入res_key-cache_key键值对:
127.0.0.1:6379> keys *
1) ":1:res_key"
参考:
django-redis文档:
low-level-cache-api文档:
cache-page:
多个缓存:
转载地址:http://akxws.baihongyu.com/