【发布时间】:2022-01-28 09:35:28
【问题描述】:
我正在使用 Spring Session Redis Data(配置了自动配置,目前没有自定义),默认使用 FindByIndexNameSessionRepository 作为 SessionRepository 实现。
但是,有时在 Redis 中(在会话已经过期但未执行注销之后),前缀为 spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME: 的密钥以 -1 的 TTL 持续存在,这意味着 Redis 不会使密钥过期。
为什么当会话过期时 Spring Session(Redis 数据)不清理这个键?我在文档中也找不到提及。
如文档中所述,我已将具有主体名称的属性存储到会话中,但这并不能解决此问题。详情请见https://docs.spring.io/spring-session/reference/api.html#api-findbyindexnamesessionrepository。
使用的Redis版本:6.2.6(bitnami/redis的docker镜像:6.2.6)
相关依赖:
- Spring Boot 2.6.2
- Spring 安全 5.6.1
- Spring 会话核心 2.5.0
- Spring 会话数据 Redis 2.5.0
- Spring Data Redis 2.6.0
我不希望索引持久化的原因是,如果有很多用户至少登录过一次并且有一个持久化到 Redis 的密钥,它就像索引一样,那么 Redis 将不得不存储可能长时间(或根本)无法访问。
【问题讨论】:
-
您似乎遇到了this issue,该问题已在 Spring Session 2.6.x 中修复。尝试升级到最新版本的 Spring Session。
-
嗨@EleftheriaStein-Kousathana!感谢您指出该问题。这解决了问题!你能回答一下,让我接受吗?谢谢!
标签: spring-boot spring-security spring-data-redis spring-session