Redis mget在redispycluster客户端上未按预期工作

2024-06-26 04:03:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用“redis py cluster”连接到我们的redis群集。我们需要在一次调用中从redis集群查询100个密钥。我使用redis hashtags(带{})将所有键散列到一个节点(例如:{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集群版本:5.0.7,python:3.6,redis py集群:2.0.0

请帮忙,谢谢


Tags: pyredis示例gettimefeed集群nodes
1条回答
网友
1楼 · 发布于 2024-06-26 04:03:37

使用多批次的命令不可能使用redis py的常规实现,因此必须执行其他方法或变通方法,以便以与正常redis py方法相同的方式支持mget命令

mget命令就是这些命令之一。如果您在这里查看此方法的当前集群实现https://github.com/Grokzen/redis-py-cluster/blob/master/rediscluster/client.py#L891,您将看到它通过模仿redis py上游版本的输入和输出来工作,但它更改了内部实现,因为对于每个键,您可能必须与不同的服务器进行对话

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

相关问题 更多 >