Redis學習筆記11之應用場景以及分佈式session的解決方案

redis應用場景實現

  • 賬號註冊,短信驗證碼

key:regist:code:手機號  value:驗證碼
設置過期時間
然後是檢查

  • 用戶賬號通過發送郵件激活

註冊成功後,數據庫中已經有了賬號註冊信息,但是需要激活才能登錄,發送一封郵件,確定激活後,更新user的state即可
發送郵件前,先在redis中保存隨機生成的uuid。key:regist:activecode:隨機生成的uuid  value:userId
郵件中有激活鏈接,鏈接其實就是一個get請求:http://www.ldmall.com?activecode=隨機生成的uuid

  • 緩存變更頻率少,訪問頻率高的數據
  • 分佈式session解決方案

單機版的程序會將session存在tomcat中
session.setattribute("userId","zhangsan");
如果一個程序集羣,部署在不同的tomcat中,存的時候session放在tomcat1中,取的時候請求發送到了tomcat2,就會有問題。
引發session機制失效
解決方案1:

無需編碼解決。採用nginx+tomcat 部署,負載均衡策略,nginx將策略改爲採用hashcode即可,即nginx會根據發送請求的ip計算出不同的code,對應不同的tomcat。


壞處:
1、如果某臺存儲了大量的session的tomcat服務器宕機了,還是會丟失session,雖然採用hash策略nginx會將請求均分到最近的服務器上,還是會導致session失效
2、佔用服務器內存
3、有可能資源分配不均勻,某個tomcat的session用戶特別活躍

解決方案2:

cookie+redis來代替之前的session+cookie實現方式

先對比之前實現的細節:session+cookie實現方式

session是存在服務器上的,當用戶第一次攜帶信息訪問服務器時,服務器會保存session到服務器上,並且會自動寫入一個cookie(jsessionId),並回傳到客戶端,下次用戶再次訪問服務器時,也會攜帶這個cookie(jsessionId),此時服務器會自動獲取jsessionId,根據jsessionId定位到用戶對應的session信息。

如果用戶將客戶端上的cookie都清理了,即用戶的cookie(jsessionId)丟失,下次再訪問服務器時,就沒有cookie信息了,服務器會重寫寫入一個jsessionId返回給客戶端。

 

cookie+redis實現方式

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章