配置Redis作为Django的默认缓存服务
目前Django中支持的cache backend
Memcached
Database caching
Filesystem caching
local-memory caching
在这些cache之外,你可以自己定制自己的cache后端.
-
Redis Cache Backend
现在很多公司在需要使用缓存技术时首先考虑的基本都是redis, 作为一个使用很广的cache DB, Django官方还没有提供对应的Redis支持, 但是目前github上面已经有两个还不错的第三库可以直接用来集成到系统中.
-
集成django-redis到Django中
-
首先需要安装django-redis,根据django版本安装不同的版本,本例中django1.8.7
pip install django-redis==4.3.0
-
修改django中的cache设置,django-redis库目前支持单节点Redis和多节点的Redis Master-Slave,详情查看对应的文档django-redis文档
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } }
-
如果Redis是通过Sentinel来做的HA,那么django-redis中目前还没有提供,但是github上已经有对应的SentinelClient
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "master_name/sentinel_uri/db", "OPTIONS": { "CLIENT_CLASS": "path.SentinelClient", } } }
只需要将上述的SentinelClinet添加到自己的代码库中稍微修改即可,配置上面只需要将之前的连接修改为对应的sentinel的连接即可
-
-
迁移之前的cache中的信息到redis_cache中,一般来说就是session需要迁移,其他的信息可以在用户访问的过程中重新缓存到对应的cache中即可
首先需要查看项目的settings文件,查看之前的session配置
# SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' SESSION_ENGINE = 'django.contrib.sessions.backends.cached'
如果是cached_db则表示之前的session是在db和cache中都有存储,这种情况下不需要导入对应的session,用户登录获取session会从数据库中读取,然后重新缓存到cache中
如果是cache则需要将对应的session重新导入到redis中,否则可能导致登录的用户需要重新登录的问题,已经部分在session中的数据将会丢失掉