【发布时间】:2019-06-30 15:55:36
【问题描述】:
问题: 我想在一个键上设置一个 TTL(以避免它永远存在),但我不想让那个特定的键被驱逐。 当我设置 TTL 时,我知道什么时候让缓存过期是安全的,但是在这个时间之前让缓存过期是不安全的,并且驱逐会带来这个缓存提前过期的风险。
上下文: 我正在使用 Redis 以多种语言缓存对象,如果基础数据发生更改,但是我想从 Redis 中删除所有关联的缓存。 我解决这个问题的方法是在 Redis 上创建一个 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'
【问题讨论】:
标签: redis