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實現方式