Spring Session Redis中ConfigureRedisAction.NO_OP不生效问题求助
解决方案
首先明确核心原因:ConfigureRedisAction.NO_OP只是阻止Spring Session自动执行Redis的config set命令来开启键空间事件,但Redis服务器本身的键空间事件配置不受这个Bean影响。如果Redis配置文件中已经开启了过期事件通知(notify-keyspace-events包含Ex),Redis依然会发送会话过期的消息,Spring Session的内置监听器会接收这些消息并触发SessionDestroyedEvent,最终被你的RedisSessionListener捕获。
针对不同需求,有两种处理方式:
1. 完全停止接收过期事件
如果不需要监听会话销毁事件,或者想阻止这类事件触发:
- 手动修改Redis服务器的配置文件,将
notify-keyspace-events设置为不包含Ex的值(比如设置为空字符串"",或者仅保留你需要的其他事件标识)。 - 修改后重启Redis服务,确保配置生效。
2. 确保事件正确触发(如果需要监听会话销毁)
如果需要正常接收会话销毁事件,且当前事件触发不符合预期:
- 手动配置Redis服务器的
notify-keyspace-events为Ex(仅监听过期事件)或Egx(包含通用事件和过期事件),这是Spring Session触发SessionDestroyedEvent的必要前提。 - 确认你的
RedisSessionListener逻辑是符合预期的,比如区分正常会话销毁和过期销毁的场景。
额外注意:
- 当Redis禁用
config命令时,Spring Session无法自动调整键空间事件配置,所有相关配置必须在Redis服务器侧手动完成。 - Spring Session 2.7.x版本中,如果Redis未开启键空间事件,会 fallback 到定时扫描机制清理过期会话,但此时
SessionDestroyedEvent不会被实时触发,只会在扫描到过期会话时触发。
内容的提问来源于stack exchange,提问作者ohj
相关产品推荐
相关产品推荐

