[技術博客] 用戶驗證碼驗證機制---redis緩存數據庫的使用


作者:馬振亞

問題引入

在這次的開發過程中,我們的需求中有一個是普通用戶可以通過特定的機制申請成為社長。因為只有部分人才能驗證成功,所以這個最開始想了兩種思路,一個是所有用戶發出申請成為社長,然后社聯工作人員手動審核是否予通過用戶的申請。但是這種思路的局限性就在於社聯工作人員工作量比較大,需要人工審核過程比較多,比較消耗時間而且出錯率比較高。后來大家討論了一下采用了一種比較新的思路,就是社聯那邊只進行一次操作,提供給社長一個驗證碼,這個驗證碼的正確性由后端代碼直接進行處理。后來大家討論到驗證碼的失效性與不可重復性,決定把驗證碼的有效時長設置為10分鍾(從社聯申請出驗證碼)而且是單次驗證有效(驗證成功一次之后這個驗證碼就失效了)。

初識redis

這時候我們通過查閱資料決定了采用redis緩存數據庫支持上述接口的開發,redis是Nosql數據庫,是一個key-value存儲系統。雖然redis是key-value的存儲系統,但是redis支持的value存儲類型是非常的多,比如字符串、鏈表、集合、有序集合和哈希。

進過查閱資料討論得到使用redis這樣的Nosql數據庫的一般場景如下:

1) 當數據量的總大小一個機器放不下時;

2) 數據索引一個機器的內存放不下時;

3) 訪問量(讀寫混合)一個實例放不下時。

4) 需要進行失效性控制。

實際應用

在這個需求場景下,主要分為驗證碼生成保存以及用戶驗證兩個部分。

  • 驗證碼生成主要步驟
    • 后端隨機生成10位驗證碼。
    • 將驗證碼存入redis緩存中。
    • 通過查詢redis緩存進行。
  • 驗證碼驗證的主要步驟
    • 查詢redis中記錄的正確驗證碼。
    • 如果校驗成功返回成功標志,同時將redis數據庫中有記錄刪除。
    • 如果不成功返回失敗標志即可。

上述步驟用到的主要redis相關方法有set方法(存入數據庫),get方法(從數據庫中取值),remove方法(驗證成功一次就失效,保證了單次有效性)。其中為了保持10分鍾的預設有效性時間,需要在調用redis_set_cache()方法時加上時間參數。

redis_set_cache(key,value,time)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM