redis mget与redis py cluster client不按预期工作

xriantvc  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(770)

我正在使用“redis py cluster”连接到我们的redis集群。我们需要在一次调用中从redis集群查询100个密钥。我使用redis hashtags(带{})将所有键散列到一个节点(例如:{feed}1、{feed}2、{feed}3是一些示例键)。
我没有注意到顺序查询100个键和使用mget.sample代码查询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
请帮忙,谢谢!

wqnecbli

wqnecbli1#

使用多时隙的命令不可能使用redis-py的常规实现,因此必须执行其他方法或变通方法,以便以与普通redis-py方法相同的方式支持mget命令。
mget命令就是这些命令之一。如果您在这里查看此方法的当前集群实现https://github.com/grokzen/redis-py-cluster/blob/master/rediscluster/client.py#l891 您将看到它通过模仿redis py上游版本的输入和输出来工作,但是它改变了内部实现,因为对于每个密钥,您可能需要与不同的服务器进行通信。
因此,为了使代码成为直接替换而不更改代码,集群mget将按顺序迭代每个键,并获取值并以相同格式返回单个服务器案例的数据。在当前的实现中,不会有任何性能提升,但是也没有其他方法以任何其他方式来实现该方法,这也会带来一些性能提升,更重要的是实现方法的工作方式相同,而不是具有相同的性能。

相关问题