前言
在应用服务中操作redis集群都是通过操作哨兵集群的来实现的,哨兵监控整个redis集群,只有哨兵清楚目前的主从节点状态。
一旦发现redis集群出现了问题,比如主节点挂了,从节点会顶上来。但是主节点地址变了,应用服务是无感知,也不用更改访问地址,因此哨兵才是和应用服务做交互的。
安装
pip install django-sentinel
使用
- 在
settings修改CACHES配置CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", # 配置了一个哨兵节点:主节点别称(sentinel.conf中配置的)/IP地址:端口/使用几号库 "LOCATION": "mymaster/10.10.10.12:26379/1", # 配置多个哨兵节点 # "LOCATION": "mymaster/10.10.10.12:26379,10.10.10.13:26379,10.10.10.14:26379/1", "OPTIONS": { "CLIENT_CLASS": "django_sentinel.SentinelClient", "PASSWORD": 'OHWOxD6JhwMBiT', } } } - 在其他地方就可以通过
cache和redis_client来使用集群了from django_redis import get_redis_connection from django.core.cache import cache conn = get_redis_connection() conn.keys() cache.set('name', 'du') cache.get('name')
其他
还有一个第三方库django-redis-sentinel也能实现,但是会和某些版本的django-redis不兼容,注意CLIENT_CLASS类中重写的get_client和父类中传参不一致的问题,经测试在django1.9.9中使用正常