Spring Session Data Redis 中 PRINCIPLE_NAME_INDEX_NAME 的清理问题
问题: Spring Session Data Redis 在宕机并且 session 过期后才重启,PRINCIPLE_NAME_INDEX_NAME 不会自动清理。
PRINCIPLE_NAME_INDEX_NAME 不会自动清理的问题有人遇到过,但貌似前提不一样。结论应该是差不多的: Spring Session Data Redis 管理 index 有点问题。
GitHub 上有一个 issue :
2020 年 open 的,但现在还未 close 。
对 Spring 不太熟,简单看了下代码,感觉是依赖 Redis 通知 Spring 来执行清理操作。如果是宕机并 session 过期后才重启,大概是没通知。
尝试使用 Spring Session JDBC ,连接 MariaDB ,并没有产生类似问题(应该是 JDBC 使用 Spring 的定时功能来清理过期数据,和 Redis 不一样)。关系数据库的索引功能貌似在这种情况下比 Redis 好用。
题外话:
Spring Session JDBC 需要创建相关的表,可用 spring.session.jdbc.initialize-schema = always
自动创表(需要权限);亦或从依赖包中找到 schema-*.sql
,然后手动执行。