问题: 我想在某个键上设置一个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'
答案 0 :(得分:0)
您可以将maxmemory-policy
设置为其默认值“ noeviction”。在此模式下,不会清除任何键。