Redis-py hset () mapping - TypeError при установке нескольких значений элемента - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю очень большие таблицы поиска в Redis. У меня есть некоторый простой код, который работает как задумано при циклическом прохождении через диктовку, чтобы установить одно значение в моем Redis ha sh (через конвейер) для каждого элемента, используя 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()

Это медленно с большим требованием. Чтобы ускорить его, я хочу иметь возможность устанавливать несколько элементов в качестве отображения в конвейере без необходимости l oop поверх него. Теперь, когда 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.

1 Ответ

1 голос
/ 10 апреля 2020

Это известная проблема, как показано здесь -> https://github.com/andymccurdy/redis-py/issues/1310#issuecomment -603081122 .

Как видно на этом изображении, исходный код в PyPi имеет hset с сигнатурой функции, которая не включает ключевое слово mapping. При установке py-redis вы должны убедиться, что такая же проблема присутствует, и также следовать этому запросу. Чтобы обойти это, вы можете клонировать прямо из ветви master, чтобы использовать эту функцию.

...