Есть ли способ вставить какой-либо оператор python при использовании транзакции redis Python? - PullRequest
0 голосов
/ 29 августа 2018

Redis очень прост в использовании в Python. Однако теперь у меня возникла проблема с использованием транзакции Redis. Сначала я должен получить key в Redis, затем я должен проверить, является ли значение, связанное с этим ключом, допустимым. Я надеюсь, что эти операции будут атомарными. Вот мой код.

pipe = redis_conn.pipeline()
pipe.multi()
var = pipe.get('key_want_to_be_read')
if is_legal(val):
    do_something
else:
    do_another_thing
pipe.execute()

Однако, когда я запускаю этот код, имя Python var не привязано к значению, хранящемуся в Redis, а Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>, поэтому. Есть ли способ получить ключ и связать его с именем питона в транзакции redis?

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете зарегистрировать скрипт lua следующим образом:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
redis_script = r.register_script("""
    local valueToTest = redis.call('GET','{key}')
    --Test key in lua
    """.format(key=key_to_be_read))

А затем назовите его с redis_script()

С сайта Redis это атомный код:

Redis использует один и тот же интерпретатор Lua для запуска всех команд. Также Redis гарантирует, что скрипт выполняется атомарным способом: никакие другие Сценарий или команда Redis будут выполняться во время выполнения сценария казнены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...