redis-py模块是否适用于Redis集群模式?

9

我正在尝试将redis-py与Redis集群模式一起使用,但无法使其正常工作。我发现redis-py-cluster可以工作,但我更喜欢redis-py,因为我一直在使用它并且它是推荐的客户端

3个回答

11
根据 redis-py文档:

redis-py 现已支持集群模式,并提供 Redis 集群的客户端。

请注意,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>>>]]


7
redis-py不支持集群模式。 集群具有完全不同的架构,以实现水平可扩展性。 在其设计中,HA(高可用性)不是优先考虑的。 因此,您不能将一个客户端用于另一个客户端。
redis-py-cluster似乎正在进行开发/支持,并基于redis.py。 您链接的客户端页面不适用于redis集群。 "redis-py-cluster"在redis集群页面上提到(查找“Playing with the cluster”):https://redis.io/topics/cluster-tutorial 除了群集之外,Redis具有哨兵支持设置以提供HA,这是redis-py支持的。

redis-py 4.1.0增加了对Redis集群的支持。请参见https://github.com/redis/redis-py/releases/tag/v4.1.0rc1。看起来已经有几个修复版本了,所以使用最新版本的redis-py? - sebastian

2
您可以在 Redis 集群中使用 redis-py,但由于不同的键被分区到不同的节点,您需要计算(通过 crc16/crc32 哈希函数)哪个集群处理哪些键。
为了充分利用“集群模式”,您需要实现“客户端分区”和“查询路由”,而 redis-py-cluster 提供了这些功能。 (https://redis.io/topics/partitioning)
redis-py-cluster 的一个主要缺点是它没有提供“管道 + 事务”中原子操作的解决方案。

1
解决管道+事务问题有不同的方法和实现。但主要问题是,在整个管道是原子或事务性的集群redis环境中,现在无法找到解决方案。你只能在管道内每个节点上获得事务/原子操作,但永远无法获得整个管道。需要在redis内进行更多更改以完全支持此功能。 - Grokzen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接