簡體   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