繁体   English   中英

Redis mget 无法与 redis-py-cluster 客户端按预期工作

[英]Redis mget not working as expected with redis-py-cluster client

我正在使用“redis-py-cluster”连接到我们的 Redis 集群。 我们需要一次调用从 redis 集群中查询 100 个键。 我使用 redis 主题标签(带有 {})到 hash 一个节点的所有键(例如:{feed}1、{feed}2、{feed}3 是一些示例键)。

我没有注意到顺序查询 100 个键和使用 mget 查询 100 个键之间的时间差。这里的示例代码:

rconn = RedisCluster(startup_nodes=self.startup_nodes, decode_responses=True)
flist=['{feed}1','{feed}2','{feed}3','{feed}4'....'{feed}100']
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

请帮忙,谢谢!

与 multislot 一起使用的命令无法使用 redis-py 中的常规实现,因此必须执行其他方法或变通方法以支持 mget 命令,其方式与正常 redis-py 方法的工作方式相同。

mget 命令是这些命令之一。 如果您在此处查看此方法的当前集群实现https://github.com/Grokzen/redis-py-cluster/blob/master/rediscluster/client.py#L891 ,您将看到它通过模仿输入和output 来自 redis-py 的上游版本,但它改变了内部实现,因为您可能必须与不同的服务器通信。

因此,为了使代码成为直接替换而不更改您的代码,集群 mget 将按顺序迭代每个键并获取值并以相同格式返回单个服务器案例的数据。 使用当前的实现不会有任何性能提升,但是没有其他方法可以以任何其他方式实现该方法,这会带来一些性能提升,更重要的是实现该方法以相同的方式工作,而不是让相同的表现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM