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