1. 程式人生 > >關於專案中session一致性問題的解決

關於專案中session一致性問題的解決

session 記憶體 tomcat建立。
session和cookie是一對一,cookie會儲存sessionId–>>>JsessionId

分散式下session一致性問題解決方案

方案1 基於ngnix的ip_hash策略來做負載均衡
原理 根據ip做hash計算,同一個ip的請求始終會定位到同一臺tomcat

缺點:如果一臺tomcat宕機,就會出現使用者session的缺失。

方案2 基於伺服器session複製
原理: tomcat伺服器建立session後,會通過組播方式把session傳送到組播地址中的其他伺服器上

優點:侵入式較少 需要配置web.xml 分散式。session備份、

 缺點 延遲 受限記憶體資源。高流量 頻寬佔用較大、不靈活

方案3 Session集中統一管理
原理 session不由tomcat管理,而是統一放到一個地方集中式管理,讀取和寫入session都依賴第三方軟體
例如 redis mongodb mysql等等

 優點:大型分散式環境首選方案。

spring 如果做到session集中管理
 HttpSession是一個介面 --Servlet容器會實現HttpSession介面 給出實現(TomCat有一個Session容器)
    Spring Session本質:覆蓋原有tomcat容器的HttpSession實現

Spring Session原始碼  理解。
Tomcat實現了對HttpSession介面的實現。但是使用SpringSession之後 在web.xml檔案中配置了攔截器 就會是使用

Spring Session的配置。SpringSession實現類有JDBCSessionRespository Mongdb Redis。因此。在配置了RedisSession
倉庫之後就會自動使用Redis的實現類。新增到Redis資料庫中。將Session資訊儲存到Redis資料庫中。