Redis EXPIREAT удаляет себя при GET?

Согласно документации Redis, EXPIREAT имеет «точно такой же эффект и семантику, что и EXPIRE».

EXPIRE становится недействительным, когда ключ извлекается через GET. В документации EXPIREAT нет упоминания о подобном поведении, но не имеет смысла, чтобы EXPIREAT больше не истекал при извлечении ключа.

Из-за расплывчатого характера документации я не могу сказать, каково фактическое поведение EXPIREAT в этом сценарии.

Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Redis - это популярная база данных типа "ключ-значение" в памяти с поддержкой различных типов и структур данных, которая в основном используется для...
0
0
271
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле истечение срока действия при извлечении ключа - не единственный способ, согласно документации

Срок действия ключей Redis истекает двумя способами: пассивным и активным.

  • Срок действия ключа пассивно истекает просто тогда, когда какой-либо клиент пытается получить к нему доступ, и время ожидания ключа истекло.
  • Конечно, этого недостаточно, так как есть ключи с истекшим сроком действия, к которым больше никогда не будет доступа. Эти ключи в любом случае должны быть просрочены, поэтому периодически Redis тестирует несколько случайных ключей среди ключей с установленным сроком действия. Все ключи, срок действия которых уже истек, удаляются из пространства ключей.

На ваш вопрос;

В кодовой базе Redis есть общая функция истечения срока действия, и в разделе комментариев говорится:

Это общая реализация команды для EXPIRE, PEXPIRE, EXPIREAT и PEXPIREAT.

«Мое оптимистическое предположение» состоит в том, что эти разные команды expire(или *at) вызывают эту функцию с разными параметрами, выполняя преобразование. Таким образом, команда EXPIREAT также имеет то же поведение, что и EXPIRE, и срок действия ключей истекает теми же двумя способами.

Это действительно раздражает - я не думаю, что это логичный способ справиться с EXPIREAT. Использование EXPIREAT будет означать, что вы действительно хотите, чтобы срок его действия истек в это время, несмотря ни на что... В любом случае, спасибо за ответ.

Alfie 22.12.2020 23:54

на самом деле это не влияет на поведение истечения срока действия @Alfie - и срок действия, и срок действия истекают одинаково, и они истекают через заданные секунды или временные метки.

Ersoy 23.12.2020 01:08

Другие вопросы по теме