Назад | Перейти на главную страницу

Redis и «недопустимое время истечения срока в setex»

Мы запускаем приложение Python (Django), которое временно хранит данные в Redis. Однако иногда случается, что данные к тому времени, когда они будут сохранены в Redis, уже устарели, и поэтому setex вызывается со временем истечения <= 0.

Есть ли способ заставить Redis молча отбросить такую ​​команду setex, не жалуясь открыто:

 ResponseError: invalid expire time in setex

Сейчас я не могу сделать это из приложения.

В Django есть очень хорошие примитивы для обработки этой ситуации. Просто настройте redis как один из своих КЭШОВ и используйте метод cachr.set, чтобы установить срок хранения n секунд.

Вы можете написать сценарий LUA, который сделает это.

Отправьте имя ключа как KEYS, а строку значения и срок действия как ARGV:

redis.call('set', KEYS[1], ARGV[1],'EX', ARGV[2])
return 1

Вы также можете вызывать набор, только если срок действия> 0. Вы можете вернуть любой ответ, какой захотите, независимо от выполненной операции.

Загрузите сценарий LUA один раз с помощью SCRIPT LOAD, сохраните его ответ SHA1 и используйте его с EVALSHA, чтобы избежать отправки / компиляции сценария lua для каждого использования.