Я создаю несколько очень больших таблиц поиска в 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()
Это медленно с большим словарем. Чтобы ускорить его, я хочу иметь возможность устанавливать несколько элементов в качестве сопоставления с конвейером, не зацикливаясь на нем. Теперь, когда 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()
может принимать несколько предметов таким образом?
Я использую py-redis 3.4.1 с Python 3.7.5.