1. 程式人生 > >解決使用tomcat-redis-session-manager httpSessionLinster監聽功能失效問題

解決使用tomcat-redis-session-manager httpSessionLinster監聽功能失效問題

使用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這塊底層程式碼的理解有幾個帖子寫的比較接近底層,感謝大神:

測試已經可用。如果後續有什麼問題會繼續更新,希望大家多多指點