如何处理 redis-py `pipeline.execute()` 返回的 `4` 数组?

How to handle an array of `4`s returned by redis-py `pipeline.execute()`?

我正在使用 redis-py 处理对 Redis 存储的批量插入。

我写了下面很简单的方法:

import redis

def push_metadata_to_redis(list_of_nested_dictionaries):

    redis_client = redis.Redis(host='localhost', port=6379, db=0)
    redis_pipeline = redis_client.pipeline(transaction=False)

    for dictionary in list_of_nested_dictionaries:
        for k, inner_dict in dictionary.items()
            redis_pipeline.hset(k, mapping=inner_dict)

        result = redis_pipeline.execute(raise_on_error=True)
        print(result)

基本上是:

  1. 输入包含数千个词典的列表
  2. 对于每个字典,将每个 key/value 项推送到 Redis 中(值也是字典,这就是我使用 hset 的原因)

每个 dictionary 包含 ~10k 个元素,因此 redis_pipeline.execute(raise_on_error=True) 每 ~10k 发生一次 hset.

我注意到几分钟后,result 值从 0 的数组步进到 4 的数组,这让我很担心。

一方面,我希望任何错误都应作为异常 (raise_on_error=True) 提出,但另一方面,我无法在文档中找到有关此行为的任何参考,我也没有明白那是什么意思。

所以我的问题是:

  1. result等于4的数组是不是意味着redis_pipeline.execute(raise_on_error=True)操作出了问题?
  2. 如果是,我怎么知道出了什么问题?
  3. 如果不是,那是什么意思?

提前致谢。

因此,当使用 HSET 命令时,return 值是添加的字段数

# check if key exists
127.0.0.1:6379> EXISTS key1
(integer) 0
# add a hash with 4 k/v pairs
127.0.0.1:6379> HSET key1 a 1 b 1 c 1 d 1
(integer) 4
# Set same fields for an existing hash
127.0.0.1:6379> HSET key1 a 1 b 1 c 1 d 1
(integer) 0
# Add an additional k/v pair
127.0.0.1:6379> HSET key1 a 1 b 1 c 1 d 1 e 1
(integer) 1
127.0.0.1:6379> HSET key1 f 1
(integer) 1


所以缓存中可能已经存在那些为 0 的条目,并且没有添加新字段。