使用管道重新聚集MGET

2024-06-26 03:40:06 发布

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

我正在尝试使用管道在我的Redis上执行MGET操作,以提高性能。 我尝试过一次完成MGET,也尝试过批量流程

from rediscluster import RedisCluster
ru = RedisCluster(startup_nodes=[{"host": "somecache.aws.com", "port": "7845"}], 
        decode_responses=True, 
        skip_full_coverage_check=True)
    
pipe = ru.pipeline()        
# pipe.mget(keys)
    
for i in range(0, len(keys), batch_size):
    temp_list = keys[i:i + batch_size]
    pipe.mget(temp_list)

resp = pipe.execute()

到目前为止,我得到的错误

raise RedisClusterException("ERROR: Calling pipelined function {0} is blocked 
when running redis in cluster mode...".format(func.__name__))
rediscluster.exceptions.RedisClusterException: ERROR: 
Calling pipelined function mget is blocked when running redis in cluster mode...

我想知道的是

  1. 是否对流水线MGET进行集群
  2. 如果没有,那么有没有其他库可以用来存档

Tags: intruesizerubatcherrorkeystemp
1条回答
网友
1楼 · 发布于 2024-06-26 03:40:06

事实证明,我们不能将MGET用于管道,下面是m的最终解决方案

from rediscluster import RedisCluster
    
def redis_multi_get(rc: RedisCluster, keys: list):
    pipe = rc.pipeline()
    [pipe.get(k) for k in keys]
    return pipe.execute()
    
if __name__ == '__main__':
    rc = RedisCluster(startup_nodes=[{"host": host, "port": port}], decode_responses=True, skip_full_coverage_check=True)
    keys = rc.keys(PREFIX + '*')
    cache_hit = redis_multi_get(rc, keys)

相关问题 更多 >