带管道的 RedisCluster MGET

RedisCluster MGET with pipeline

我正在尝试使用管道在我的 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. RedisCluster 是否流水线化 MGET?
  2. 如果没有,有没有其他库可以用来存档?

原来我们不能在管道中使用MGET,下面是最终的解决方案

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)