如何在不设置TTL的情况下防止驱逐特定按键?

时间:2019-02-06 16:15:47

标签: redis

问题: 我想在某个键上设置一个TTL(以避免它永远存在),但我不想撤消该特定键。 当我设置TTL时,我知道什么时候可以安全地使该缓存过期,但是在此之前使该缓存过期是不安全的,而逐出则存在使该缓存提前过期的风险。

上下文: 如果基础数据发生更改,我正在使用Redis来以多种语言缓存对象,但是我想从Redis中删除所有关联的缓存。 我解决该问题的方法是在Redis上创建一个SET,该SET包含对每种语言键的引用。我担心的是,如果该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 :(得分:0)

您可以将maxmemory-policy设置为其默认值“ noeviction”。在此模式下,不会清除任何键。