【发布时间】:2017-06-17 13:10:28
【问题描述】:
我正在尝试在集群模式下将 redis-py 与 redis 一起使用,但我无法让它工作。我看到 redis-py-cluster 可以工作,但我喜欢使用 redis-py,因为我一直在使用它,它是 recommended client。
【问题讨论】:
我正在尝试在集群模式下将 redis-py 与 redis 一起使用,但我无法让它工作。我看到 redis-py-cluster 可以工作,但我喜欢使用 redis-py,因为我一直在使用它,它是 recommended client。
【问题讨论】:
redis-py 不支持集群模式。集群具有完全不同的架构来服务于水平可扩展性的目的。 HA(高可用性)不是其设计的优先事项。因此,您不能将一个客户端用于另一个客户端。
redis-py-cluster 似乎有持续的开发/支持,它基于 redis.py。您链接的客户端页面不适用于 redis 集群。 redis集群页面上提到了“redis-py-cluster”(寻找“玩集群”):https://redis.io/topics/cluster-tutorial
除了集群之外,Redis 还支持设置以提供 HA,redis-py 确实支持。
【讨论】:
你可以在redis集群中使用redis-py,但是由于不同的key被划分到不同的节点,你需要计算(通过crc16/crc32哈希函数)哪个集群处理哪些key。
为了充分利用“集群模式”,您不关心密钥的位置,您需要实现 redis-py-cluster 提供的“客户端分区”和“查询路由”。 (https://redis.io/topics/partitioning)
redis-py-cluster 的一大缺点是它没有为“管道+事务”中的原子操作提供解决方案
【讨论】:
录制到redis-pydocumentation:
redis-py 现已支持集群模式,并为 Redis Cluster 提供客户端。
请注意redis-py 在版本4.1.0 中添加了此功能,目前还没有稳定版本。如果你想安装它,你应该使用下面的命令:
pip install redis==4.1.0-rc1
也许当您阅读此答案时,它是稳定的!因此,只需在没有 -rc1 帖子的情况下安装即可。
你可以像下面这样连接到你的 redis-cluster:
>>> from redis.cluster import RedisCluster as Redis
>>> rc = Redis(host='localhost', port=6379)
>>> print(rc.get_nodes())
[[host=127.0.0.1,port=6379,name=127.0.0.1:6379,server_type=primary,redis_connection=Redis<ConnectionPool<Connection<host=127.0.0.1,port=6379,db=0>>>], [host=127.0.0.1,port=6378,name=127.0.0.1:6378,server_type=primary,redis_connection=Redis<ConnectionPool<Connection<host=127.0.0.1,port=6378,db=0>>>], [host=127.0.0.1,port=6377,name=127.0.0.1:6377,server_type=replica,redis_connection=Redis<ConnectionPool<Connection<host=127.0.0.1,port=6377,db=0>>>]]
【讨论】: