Мы запускаем приложение 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 для каждого использования.