Как предотвратить выселение на определенных клавишах без установки TTL? - PullRequest
0 голосов
/ 06 февраля 2019

Проблема: Я хочу установить TTL для ключа (чтобы он не длился вечно), но я НЕ хочу, чтобы этот конкретный ключ был выселен.Когда я устанавливаю TTL, я знаю, когда будет безопасно истечь срок действия этого кэша, но это небезопасно до истечения этого срока, и выселение представляет риск преждевременного истечения срока действия этого кэша.

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

Что я ищу Команда Redis, которая выглядит примерно как ключ PLEASE_DO_NOT_EVICT, но не препятствует истечению срока действия ключа после истечения TTL.

Большое спасибо за то, что уделили время на чтение и ответ!


ХотяЯ мог бы использовать сопоставление с подстановочными знаками, чтобы найти все связанные ключи, это НАМНОГО медленнее, чем SMEMBERS, и я делаю это в среде, где учитывается каждая MS, так как эти объекты создаются и удаляются очень часто, поэтому этот запрос происходит очень часто.


Отсутствие TTL в этих объектах означает, что они начинают накапливаться в памяти, что является нежелательным.И они действительно перестают ссылаться через некоторое время


Отсутствие политики выселения кажется рискованным, и я бы очень хотел


При создании:

SADD 'object:id:group', 'object:id:spanish'
SETEX 'object:id:spanish', 'Este es el object en espaniol', 100
EXPIRE 'object:id:group', 100

При истечении срока действия группы из-за изменения объекта:

SMEMBERS 'object:id:group'
=> 'object:id:spanish', 'object:id:english'
DELETE 'object:id:spanish', 'object:id:english'
DELETE 'object:id:group'

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете установить maxmemory-policy в значение по умолчанию "noeviction".В этом режиме никакие ключи не выселяются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...