當前位置:
首頁 > 知識 > 分散式框架spring-session實現session一致性使用問題

分散式框架spring-session實現session一致性使用問題

前言:項目中使用到spring-session來緩存用戶信息,保證服務之間session一致性,但是獲取session信息為什麼不能再服務層獲取?

一、spring-session實現session一致性方式

用戶每一次請求都會攜帶sessionId,用戶登錄時會根據sessionId去校驗用戶信息是否存在,瀏覽器端只要保證當前的cookie信息,獲取 session信息保存在redis中,不依賴服務之間,所以就保證了session一致性

分散式框架spring-session實現session一致性使用問題

二、有狀態和無狀態

1、有狀態bean:

每個連接都會創建單獨的實例,在當前用戶的生存周期內,實例中保存用戶的信息,即有狀態,一旦調用完成或者實例結束,bean的生命周期結束,每個連接都會得到一個初始化的bean

2、無狀態bean:

bean一旦被實例化就會存在會話池中,所有的連接都可以共享,該實例由於沒有指定被哪個對象調用,所以即使連接對象生命周期結束,該實例也不會被銷毀,所以該實例被稱為無狀態的,

三、原因分析

這也就解釋了為什麼要在控制層獲取session信息,服務層的對象是無狀態的,初始化的時候會保存在會話池中(無狀態bean設計的初衷是為了節省資源開銷);而每一個訪問請求都會創建一個獨立的上下文對象,裡面的信息是當前對象獨享的,所以能保證獲取用戶session信息的完整性和正確性

分散式框架spring-session實現session一致性使用問題

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Linux之索引式文件系統
使用Kubespray部署生產可用的Kubernetes集群

TAG:程序員小新人學習 |