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

aur*_*obo 3 spring-data spring-data-redis spring-boot

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

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

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

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

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

@RedisHash(value = "requestContext", timeToLive = 9000)
Run Code Online (Sandbox Code Playgroud)

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

repository.delete(id)
Run Code Online (Sandbox Code Playgroud)

预先感谢您的帮助。

Bin*_*rge 5

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

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