我使用的是Spring Redis存储库,我对删除操作和幻像键感到困惑。
执行删除时,幻像键不会被删除,这是正常的行为吗?如果是,是否可以在从代码中删除原始密钥时强制删除幻像密钥。
我原以为删除会删除原始密钥和相关的幻像密钥。
我计划使用timeToLive功能,以确保我的应用程序未删除的密钥会在一段时间后过期。
在相关域对象上设置的注释
@RedisHash(value = "requestContext", timeToLive = 9000)
删除是以这种方式执行的:
repository.delete(id)
提前感谢您的帮助。
答案 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存储库在所有连接的应用程序上收到到期事件。