2017-09-28 100 views
0

我正在使用Spring Redis存储库,我对删除操作和幻像键感到困惑。从redis删除键/值 - 幻影密钥没有删除

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

我期待删除删除原始密钥和相关的幻影密钥。

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

注释有关域对象

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

的删除设置上这样进行的:

repository.delete(id) 

预先感谢您的帮助。

回答

0

当您从Redis中删除密钥/值时,Phantom密钥不会立即删除。 Spring Data Redis管理幻影密钥以管理二级索引以及其他功能。 Spring Data Redis将原始散列的副本保留为具有稍长TTL(5分钟)的幻像散列。这意味着:幻像 Redis中的TTL比常规密钥TTL多5分钟。 当原始散列期满时,弹簧数据Redis的加载幻象散列来执行清理诸如去除二级索引等的引用 了解更多:Redis key Expirations

当期满被设定为正的值,根据EXPIRE命令被执行。除了保留原始文件外,幻影副本在Redis中保留并设置为在原始文件后5分钟到期。这样做的目的在于,即使原始值已经消失,只要密钥过期,Repository支持也可以通过Springs ApplicationEventPublisher发布RedisKeyExpiredEvent持有过期值。所有连接的应用程序将使用Spring Data Redis存储库接收到期事件。