从 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 键操作 | 连接数据库 | 向数据库中添加值 | 查询所有键 | 查询键存在 | 查询键类型 | 删除键 | 设置键过期时间 )