Проблема: Я хочу установить 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'