python之redis-cluster

redis有2种部署方式,单点和cluster。

生产中为避免单点故障丢失数据都会部署为cluster,最近有用到python开发涉及到操作redis的操作。简单封装了下,可以在传参的时候确定是连接哪种模式。

需要安装的python插件:

redis-2.10.6 (redis-2.10.3 )

redis-py-cluster-1.3.4

详见代码:

class myRedis(object):
    def __init__(self,redis_type=None,**args):
        if redis_type == "cluster":
            import rediscluster
            self.r_conn = rediscluster.StrictRedisCluster(**args)
        else:
            import redis
            self.r_conn = redis.StrictRedis(**args)
           
   
    def GetValue(self,name):
        return self.r_conn.get(name)
       
    def IncrValue(self,name):
        return self.r_conn.incr(name)

    def SetValue(self,name,value):
        self.r_conn.set(name,value)
       
    def GetSetValue(self,name,value):
        return self.r_conn.getset(name,value)
       

if __name__ == '__main__':  

    #单点
    conn_dict={'host':'127.0.0.1', 'port':6379}
    redis_type='single'
    myredis = myRedis(redis_type,**conn_dict)
    print(myredis.SetValue('name','test'))
    print(myredis.GetValue('name'))
    print(myredis.GetSetValue('name1',0))
    print(myredis.GetValue('name'))
   
    #cluster
    conn_dict={"startup_nodes":[{'host':'127.0.0.1', 'port':9001},{'host':'127.0.0.1', 'port':9002},{'host':'127.0.0.1', 'port':9003}]}
    redis_type='cluster'
    myredis = myRedis(redis_type,**conn_dict)
    print(myredis.SetValue('name','test'))
    print(myredis.GetValue('name'))
    print(myredis.GetSetValue('name',0))
    print(myredis.GetValue('name'))


1、操作单点的的时候,没有问题。


2、操作cluster模式的时候,报了一个错误:

Traceback (most recent call last):
  File "2.py", line 18, in <module>
    redis_cluster()
  File "2.py", line 10, in redis_cluster
    redisconn = rediscluster.RedisCluster(startup_nodes=redis_nodes,decode_responses=True)
  File "/home/zt/mypy/soft/py273/lib/python2.7/site-packages/rediscluster/client.py", line 181, in __init__
    **kwargs
  File "/home/zt/mypy/soft/py273/lib/python2.7/site-packages/rediscluster/connection.py", line 141, in __init__
    self.nodes.initialize()
  File "/home/zt/mypy/soft/py273/lib/python2.7/site-packages/rediscluster/nodemanager.py", line 194, in initialize
    raise RedisClusterException("ERROR sending 'cluster slots' command to redis server: {0}".format(node))


然后在分析nodemanager.py源码,然后发现cluster也导入了redis的进行的连接,自己安装的版本是redis-2.10.3,然后换成了redis-2.10.6,问题就解决了。

redis-2.10.3版本在连接redis有一些问题。所以需要升级。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值