Django中使用django-sentinel操作redis集群

864 阅读1分钟

前言

在应用服务中操作redis集群都是通过操作哨兵集群的来实现的,哨兵监控整个redis集群,只有哨兵清楚目前的主从节点状态。

一旦发现redis集群出现了问题,比如主节点挂了,从节点会顶上来。但是主节点地址变了,应用服务是无感知,也不用更改访问地址,因此哨兵才是和应用服务做交互的。

安装

pip install django-sentinel

使用

  1. 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',
            }
        }
    }
    
  2. 在其他地方就可以通过cacheredis_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中使用正常