redis py hset()mapping-typeerror设置多个项值时

oyjwcjzk  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(1063)

我正在redis中构建一些非常大的查找表。我有一些简单的代码,在循环使用dict为每个项目设置redis散列中的单个值(通过管道)时,这些代码可以按预期工作 hset() :

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()

这对于一个大的dict来说是很慢的。为了加快它的速度,我希望能够将多个项作为Map设置到管道中,而不必在管道上循环。与 hmset() 现在不赞成了,看来 hset() 可以通过关键字arg接受Map。我已尝试执行以下操作:

with self.db.pipeline() as pipe:    
    pipe.hset("lookup_table", mapping=foo)
pipe.execute()

但这会产生错误 TypeError: hset() got an unexpected keyword argument 'mapping' . 我在用吗 hset() 不正确?还是我想错了 hset() 这样可以接受多个项目吗?
我将pyredis3.4.1与python3.7.5结合使用。

r55awzrz

r55awzrz1#

这似乎是一个已知问题,如下所示-->https://github.com/andymccurdy/redis-py/issues/1310#issuecomment-603081122.
正如您在链接的图像中所看到的,pypi中的源代码 hset 具有不包含关键字的函数签名 mapping . 您应该在安装 py-redis 同样的问题出现了,也跟着那张票走。为了解决这个问题,你可以直接从 master 分支以使用该功能。

相关问题