从 redis 中删除键/值 - 幻象键未删除

Posted

技术标签:

【中文标题】从 redis 中删除键/值 - 幻象键未删除【英文标题】:delete key/value from redis - phantom key not deleted 【发布时间】:2018-03-10 03:03:49 【问题描述】:

我正在使用 Spring Redis 存储库,我对删除操作和幻像键感到困惑。

执行删除时,幻象键没有被删除,这是正常行为吗?如果是,是否可以在从代码中删除原始密钥时强制删除幻像密钥。

我期待删除会删除原始密钥和关联的幻像密钥。

我计划使用 timeToLive 功能来确保我的应用程序未删除的密钥将在一段时间后过期。

在相关域对象上设置注释

@RedisHash(value = "requestContext", timeToLive = 9000)

删除是这样进行的:

repository.delete(id)

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

当您从 Redis 中删除键/值时,不会立即删除幻像键。 Spring Data Redis 管理幻键来管理二级索引以及其他功能。 Spring Data Redis 将原始哈希的副本保留为具有稍长 TTL(5 分钟)的幻像哈希。这意味着 Redis 中的 :phantom TTL 比常规密钥 TTL 多 5 分钟。 当原始哈希过期时,Spring Data Redis 加载幻像哈希以执行清理,例如从二级索引中删除引用等。 阅读更多:Redis key Expirations

当到期设置为正值时,执行相应的 EXPIRE 命令。除了保留原始副本外,幻影副本还会保留在 Redis 中,并设置为在原始副本后 5 分钟过期。这样做是为了使存储库支持能够在密钥过期时通过 Springs ApplicationEventPublisher 发布持有过期值的 RedisKeyExpiredEvent,即使原始值已经消失。使用 Spring Data Redis 存储库的所有连接应用程序都将收到过期事件。

【讨论】:

以上是关于从 redis 中删除键/值 - 幻象键未删除的主要内容,如果未能解决你的问题,请参考以下文章

RedisRedis 数据库操作 ③ ( Redis 键操作 | 连接数据库 | 向数据库中添加值 | 查询所有键 | 查询键存在 | 查询键类型 | 删除键 | 设置键过期时间 )

如何删除redis中list的某个值

如何从redis-cli repl中删除Redis匹配模式中的所有键?

redis过期键删除策略以及大key删除方法

Redis中的LRU淘汰策略分析

使用 node-redis 删除 redis 中的键数组