как редиснуть хсет только если ключ существует - PullRequest
0 голосов
/ 27 апреля 2019

Я использую redis для кэширования своего веб-блога. В моей статье есть поле «флажок», если это поле изменилось в базе данных, мне также нужно установить новое значение в redis, здесь код

if redis_conn.exists("article"):
    redis_conn.hset("article", "checked",1)

кажется, что все в порядке, но если срок действия ключа статьи истек после того, как он существует и до hset, возникнут некоторые проблемы. Ключ статьи будет иметь только одно проверенное поле, другие поля, такие как заголовок, содержимое и т. Д., Пропадут.

как установить hset, только если ключ существует, если срок действия ключа истек, просто ничего не делать.

1 Ответ

1 голос
/ 27 апреля 2019

Для этого можно использовать сценарий Lua, т. Е. (Псевдо NodeJS):

redis_conn.eval("if redis.call('EXISTS', KEYS[1])==1 then redis.call('HSET', KEYS[1], ARGV[1], ARGV[2]) end", 1, "article", "checked", 1)

Серверные сценарии Lua являются атомарными, поэтому вы уверены, что срок действия ключа не истечет между вызовами.

Примечание. Redis имеет команду HSETNX, но не команду HSETEX, которая, по-видимому, и нужна.

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