Redis mget 无法与 redis-py-cluster 客户端按预期工作
Posted
技术标签:
【中文标题】Redis mget 无法与 redis-py-cluster 客户端按预期工作【英文标题】:Redis mget not working as expected with redis-py-cluster client 【发布时间】:2020-07-31 22:04:15 【问题描述】:我正在使用“redis-py-cluster”连接到我们的 Redis 集群。我们需要一次调用从 redis 集群中查询 100 个键。我使用 redis 主题标签(带有 )将所有键散列到一个节点(例如:feed1、feed2、feed3 是一些示例键)。
我没有注意到顺序查询 100 个键和使用 mget 查询 100 个键之间的时间差异很大。示例代码:
rconn = RedisCluster(startup_nodes=self.startup_nodes, decode_responses=True)
flist=['feed1','feed2','feed3','feed4'....'feed100']
time1 = time.time()
for i in range(1,len(flist)):
feed_s = rconn.get(flist[i])
print("Feeds get one by one time:%f", time.time()-time1)
time2 = time.time()
feed_m = rconn.mget(flist)
print("Feeds mget time:%f", time.time()-time2)
“redis-py-cluster”是否支持mget?这是使用mget查询的正确方式吗?
版本:redis-cluster 版本:5.0.7,python:3.6,redis-py-cluster:2.0.0
请帮忙,谢谢!
【问题讨论】:
【参考方案1】:与 multislot 一起使用的命令无法使用 redis-py 的常规实现,因此必须使用其他方法或变通方法来支持 mget 命令,就像正常的 redis-py 方法一样。
mget 命令是这些命令之一。如果您在https://github.com/Grokzen/redis-py-cluster/blob/master/rediscluster/client.py#L891 处查看此方法的当前集群实现,您将看到它通过模仿 redis-py 上游版本的输入和输出来工作,但它会更改每个键的内部实现,您可能必须与不同的服务器交谈。
因此,为了使代码成为直接替换而不更改您的代码,集群 mget 将按顺序迭代每个键并获取值并以相同格式返回单个服务器案例的数据。使用当前的实现不会有任何性能提升,但没有其他方法可以以任何其他方式实现该方法,这会带来一些性能提升,更重要的是实现该方法以相同的方式工作,而不是让相同的性能。
【讨论】:
以上是关于Redis mget 无法与 redis-py-cluster 客户端按预期工作的主要内容,如果未能解决你的问题,请参考以下文章