Redis: Как обновить ключ, но не изменить срок его действия?

Использование Redis в качестве службы кеширования для кеширования некоторых неважных данных, и есть случай, когда необходимо обновить значение без сброса или переопределить время истечения срока действия, есть ли хороший способ решить эту проблему? Я искал и нашел следующие 2 решения

  1. С помощью команды setrange, поскольку значение немного сложнее, поэтому в данной ситуации это не подходит.
  2. Получите время ttl, затем установите его как время истечения срока действия при обновлении значения. это кажется немного более избыточным.

Есть хорошая идея решить эту проблему?


person He Shuang    schedule 06.11.2018    source источник


Ответы (2)


Другой способ решить эту проблему - использовать INCRBY.

Для этого вам нужно проделать несколько шагов.

  1. Получите существующее значение. Например, 10.
  2. Определите значение обновления, например 17.
  3. INCRBY величина их разницы 17-10. Это означает, что 7

Это не изменит ttl

person Ayon    schedule 07.11.2018
comment
ДА. Команда INCRBY отлично работает, когда тип значения является числовым, но когда типом являются символьные данные или String, она не работает. - person He Shuang; 08.11.2018

Вам не нужно делать ничего из этих двух вещей. Вам просто нужно использовать флаг KEEPTTL при установке вашего значения.

Нравится:

> set my_key this_is_my_value EX 60

Это установит значение для ключа с истечением 60 секунд.

Затем, когда вы измените значение и не хотите изменять срок действия вашего ключа, просто выполните:

> set my_key this_is_my_new_value KEEPTTL

Дополнительная информация в документах REDIS.

person Pablo Santa Cruz    schedule 16.03.2021