關於專案中session一致性問題的解決
阿新 • • 發佈:2018-12-22
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資料庫中。