从redis删除键/值 - 未删除幻像键

时间:2017-09-28 11:25:16

标签: spring-boot spring-data spring-data-redis

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

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

我原以为删除会删除原始密钥和相关的幻像密钥。

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

在相关域对象上设置的注释

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

删除是以这种方式执行的:

repository.delete(id)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

  

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