我正在尝试在集群模式下将redis-py与 redis 一起使用,但我无法让它工作。我看到redis-py-cluster可以工作,但我喜欢 redis-py,因为我一直在使用它,它是推荐的客户端。
3 回答
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,但是由于不同的键被分区到不同的节点,您需要计算(通过 crc16/crc32 哈希函数)哪个集群处理哪些键。
为了充分利用“集群模式”,您不关心密钥的位置,您需要实现 redis-py-cluster 提供的“客户端分区”和“查询路由”。( https://redis.io/topics/partitioning )
redis-py-cluster 的一大缺点是它没有为“管道+事务”中的原子操作提供解决方案
记录到redis-py
文档:
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>>>]]