Spring 会话 Redis 数据未清除 Redis 中会话的索引

Spring Session Redis Data is not clearing index to sessions in Redis

我正在使用 Spring Session Redis 数据(配置了自动配置,到目前为止没有自定义)默认使用 FindByIndexNameSessionRepository 作为 SessionRepository 实现。

但是,有时在 Redis 中(在会话已经过期但未执行注销后),前缀为 spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME: 的密钥会以 -1 的 TTL 持续存在,这意味着 Redis 不会使密钥过期。

为什么 Spring 会话(Redis 数据)在会话过期时不清除此键?我在文档中也找不到提及。

我已经按照文档中的描述将带有主体名称的属性存储到会话中,但这并没有解决这个问题。有关详细信息,请参阅 https://docs.spring.io/spring-session/reference/api.html#api-findbyindexnamesessionrepository

使用的 Redis 版本:6.2.6(docker 图像 bitnami/redis:6.2.6)

相关依赖项:

我不希望索引持久化的原因是,如果有很多用户至少登录过一次,并且有一个密钥持久化到 Redis,就像索引一样,那么 Redis 将不得不存储数据可能长时间(或根本)无法访问。

这是 Spring 会话版本 2.5.3 及之前的 a bug

如果您更新到 Spring Session 2.5.4 或任何 2.6.x,问题已解决。