Redis儲存session的需要考慮問題:
session資料如何在Redis中儲存? session屬性變更何時觸發儲存? (推薦學習:Redis影片教學)
實作:
考慮到session中資料類似map的結構,採用redis中hash儲存session資料比較合適,如果使用單一value儲存session數據,不加鎖的情況下,就會存在session覆蓋的問題,因此使用hash儲存session,每次只保存本次變更session屬性的數據,避免了鎖處理,性能更好。
如果每改一個session的屬性就觸發存儲,在變更較多session屬性時會觸發多次redis寫操作,對性能也會有影響,我們是在每次請求處理完後,做一次session的寫入,並且之寫入變更過的屬性。
如果本次沒有做session的更改, 是不會做redis寫入的,僅當沒有變更的session超過一個時間閥值(不變更session刷新過期時間的閥值),就會觸發session保存,以便session能夠延長有效期限。
兩種實作方式:
session集中儲存(redis,memcached,hbase等)。
不同伺服器上session資料進行複製,兩種方式的優缺點,大家應該一目了然。
基於session集中儲存的實作方案:
新增Filter,攔截請求,包裝HttpServletRequest
改寫getSession方法,從session儲存中獲取session數據,傳回自訂的HttpSession實作
在產生新Session後,寫入sessionid到cookie中
以上是redis怎麼存session的詳細內容。更多資訊請關注PHP中文網其他相關文章!