我正在 Redis 中构建一些非常大的查找表。我有一些简单的代码,当循环遍历 dict 以使用 hset() 为每个项目在我的 Redis 哈希(通过管道)中设置单个值时,它们按预期工作:

foo = {"1234": "5678", "abcd": "efgh", ... }

with self.db.pipeline() as pipe:
    for foo in bar:
        pipe.hset("lookup_table", foo["key"], foo["value"])
pipe.execute()

这对于大型字典来说很慢。为了加快速度,我希望能够将多个项目设置为管道的映射,而不必循环遍历它。现在不推荐使用 hmset(),似乎 hset() 可以通过关键字 arg 接受映射。我尝试执行以下操作:
with self.db.pipeline() as pipe:
    pipe.hset("lookup_table", mapping=foo)
pipe.execute()

但这会产生错误 TypeError: hset() got an unexpected keyword argument 'mapping' 。我是否错误地使用了 hset()?还是我误以为 hset() 可以以这种方式接受多个项目?

我在 Python 3.7.5 中使用 py-redis 3.4.1。

最佳答案

这似乎是一个已知问题,如下所示 --> https://github.com/andymccurdy/redis-py/issues/1310#issuecomment-603081122

正如您在链接的图像中看到的那样,PyPi 中的源代码具有 hset 和不包含关键字 mapping 的函数签名。您应该在 py-redis 的安装中验证是否存在相同的问题并遵循该票证。要解决它,您可以直接从 master 分支克隆以使用该功能。

关于python - Redis-py hset() 映射 - 设置多个项目值时出现类型错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61138821/

10-12 23:10