【问题标题】:delete key/value from redis - phantom key not deleted从 redis 中删除键/值 - 幻象键未删除
【发布时间】:2018-03-10 03:03:49
【问题描述】:

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

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

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

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

在相关域对象上设置注释

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

删除是这样进行的:

repository.delete(id)

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案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 存储库的所有连接应用程序都将收到过期事件。

    【讨论】:

      猜你喜欢
      • 2020-02-13
      • 2022-01-12
      • 1970-01-01
      • 2023-03-06
      • 2020-01-20
      • 2014-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      相关资源
      最近更新 更多