gpt4 book ai didi

redis - 如何在不设置 TTL 的情况下防止对特定键的逐出?

转载 作者:IT王子 更新时间:2023-10-29 06:16:29 27 4
gpt4 key购买 nike

问题:我想在一个键上设置一个 TTL(以避免它永远持续),但我不想让那个特定的键被驱逐。当我设置 TTL 时,我知道什么时候可以安全地使该缓存过期,但在此之前使缓存过期是不安全的,并且逐出存在使该缓存过早过期的风险。

上下文:我正在使用 Redis 以多种语言缓存对象,如果底层数据发生变化,但我想从 Redis 中删除所有关联的缓存。我解决这个问题的方法是在 Redis 上创建一个 SET,其中包含对每种语言的键的引用。我担心的是,如果该 SET 被逐出 - 我会丢失对其他键的引用,并冒着让它们在不应该保留在缓存中的风险。

我在找什么看起来像的 Redis 命令PLEASE_DO_NOT_EVICT 键同时不阻止该 key 在 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'

最佳答案

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

关于redis - 如何在不设置 TTL 的情况下防止对特定键的逐出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54557986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com