Использование RPUSH с TTL в одной команде в Redis - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь вставить запись в список в Redis, а также хочу обновлять TTL списка каждый раз, когда появляется новая запись. Я могу сделать это простым вызовом EXTIRE "my-list" ttl, используяRedis.Поскольку мое приложение получает интенсивный трафик, я хочу уменьшить количество вызовов для повторного вызова.

Могу ли я установить свой TTL во время операции push в Redis, т.е. RPUSH "mylist" I1 I2 ... IN ex "TTL ", redis поддерживает это время функциональности команды.Я вижу, что он поддерживает это для структур данных String.

1 Ответ

0 голосов
/ 27 января 2019

Redis не имеет выделенных команд для отправки и истечения срока действия списка, хотя, как вы уже упоминали, для типа данных String есть нечто подобное.

Способ решения этой задачи состоит в том, чтобы составить свою собственную «команду» из существующих. Однако вместо того, чтобы приложение вызывало эти команды, вы должны использовать скрипт Lua, как описано на странице документации EVAL .

Скрипты Lua кэшируются и запускаются на сервере атомарно. Один из таких, как следующий, вероятно, поможет в вашем случае - он ожидает получить имя ключа, отправленный элемент и значение срока действия:

local reply = redis.call('RPUSH', KEYS[1], ARGV[1])
redis.call('EXPIRE', KEYS[1], ARGV[2])
return reply
...