日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java redis 存session_JavaWeb: Redis存储Session方案

發布時間:2024/9/18 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java redis 存session_JavaWeb: Redis存储Session方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所有支持Servlet規范的容器都自帶session管理,于是大多數人都使用HttpSession接口存放狀態信息。事實上, servlet的session會使得應用服務器水平擴展變的非常困難。

使用Servlet Session時的妥協方案

Session Replication

這無疑是一種浪費內存的方法,對于5臺左右的集群還可以忍受,如果你需要幾十甚至上百臺集群,這就完全不可行。

Session Sticky

該方案雖然可以避免上面的問題,但是這完全背離了負載均衡的初衷。假如有A, B服務器,A處理session為1 ~ 5的請求,B處理session為6 ~ 10的請求,如果某個時間段內,有1 ~ 5 session的用戶訪問需求非常高,而6 ~ 10 session的用戶不怎么訪問,這樣就會導致A服務器負載過高而B卻十分清閑,此時負載均衡就失去了意義。

使用Redis進行Session存儲

在應用編寫時應該完全棄用HttpSession接口,而是將需要保存的狀態信息放到Redis中。

生成session id

當用戶登陸時,服務器生成一個全局唯一的字符串SESSION:日期:20位隨機字符串做為redis中hash數據結構的key名,然后將該標識做為cookie返回給客戶端。 之后該用戶的后續請求都會帶上此cookie, 我們編寫一個filter, 其作用為讀取請求中的標識,從redis中取出該標識對應的數據,然后放到HttpServletRequest對象中以供后續使用。

session過期

使用redis自帶的過期功能為session id設置過期時間,輕松實現session過期。

session追蹤

我們可以將每個用戶的session id記錄下來,如保存到數據庫中,或者依然放在redis里,這樣就可以查到某個注冊用戶所有session id, 輕松實現踢出登陸功能。

session更新

通過AOP, 在每個請求完后之后,檢查在請求處理過程中有沒有更新session信息,如果有則將新數據刷新到Redis中。

將session轉移到redis中后,只要做好redis的運維工作,我們的應用服務器已經是完全無狀態的了,水平擴展時只需要添加機器而不需要改動任何一行代碼。

總結

以上是生活随笔為你收集整理的java redis 存session_JavaWeb: Redis存储Session方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。