使用tomcat-redis-session-manager做session redis化有一个坑就是,代码tomcat-redis-session-manager本身对session的生命周期控制使用了redis的exprie看看代码。。
RedisSessionManager...
tomcat对session的守护线程会行上面方法对过期session进行清理,然而RedisSessionManager并没有这个操作。。所以HttpSessionLinster是监听不到session过期销毁动作的!
解决起来很简单。。注释掉上面这个方法,让其走父类processExpires();
同事要在add方法中加入标红这段代码,将sessions看下源码就知道是啥了。。就是一个线程安全的sessionmap,守护线程会定期扫描这个map里的session。使用exprie()方法清理过期session。exprie动作会被sessionLinster监听到
RedisSession 添加add方法
对session这块底层代码的理解有几个帖子写的比较接近底层,感谢大神:
测试已经可用。如果后续有什么问题会继续更新,希望大家多多指点