django-redis缓存配置

 

django-redis缓存配置

注意事项

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
# 装饰器加载视图函数上即可,括号中的数字为缓存时间,以秒为单位
@cache_page(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()