Spring Data Redis 不会在 TTL 到期后清理二级地理空间索引



使用以下模型:

@RedisHash("positions")
public class Position {
@Id
private String id;
@GeoIndexed
private Point coordinates;
@TimeToLive(unit = TimeUnit.MINUTES)
protected int ttl;
//...
}

我注意到Time To Live到期后,某些数据仍会保留。请注意过期事件之前和之后keys *命令之间的区别:

以前

127.0.0.1:6379> keys *
1) "positions:336514e6-3e52-487a-a88b-98b110ec1c28"
2) "positions:coordinates"
3) "positions:336514e6-3e52-487a-a88b-98b110ec1c28:idx"
4) "positions"
5) "positions:336514e6-3e52-487a-a88b-98b110ec1c28:phantom"

127.0.0.1:6379> keys *
1) "positions:coordinates"
2) "positions:336514e6-3e52-487a-a88b-98b110ec1c28:idx"
3) "positions"
4) "positions:336514e6-3e52-487a-a88b-98b110ec1c28:phantom"

仅删除了positions:336514e6-3e52-487a-a88b-98b110ec1c28项。

我还注意到,再过一段时间后,*:phantom项目也会被删除,但其余项目不会被删除。这是一个错误还是需要配置/实现更多内容?

您的应用程序需要保持活动状态。Redis 存储库使用密钥空间事件来获取有关到期的通知,以便 Spring Data Redis 可以清理索引结构。 Redis 仅支持顶级键过期,不支持列表/集合元素过期。

:phantom密钥的过期时间稍长,这就是为什么它在原始密钥过期后过期的原因。它用于为索引清理等提供过期的哈希值。

相关内容

  • 没有找到相关文章

最新更新