redis string實現(xiàn)共享會話和手機驗證碼應(yīng)用場景
共享會話
實現(xiàn)思路
如果每個應(yīng)用服務(wù)器,維護自己的會話數(shù)據(jù),此時彼此之間胡共享,用戶請求訪問到不同的服務(wù)器上,就可能會出現(xiàn)一些不能正確處理的情況了

為了解決這個問題,可以使用 Redis 將用戶的 Session 信息進行幾種管理,在這種模式下,只要保證 Redis 是最高可用和可擴展性的,無論用戶被均衡到哪臺 Web 服務(wù)器上,都集中從 Redis 中查詢、更新 Session 信息!

手機驗證碼
實現(xiàn)思路
生成驗證碼
- 用戶輸入手機號
- 點擊獲取驗證碼(限制:1min 之內(nèi),最多獲取 5 次)
檢查驗證碼
- 把短信收到的驗證碼這一串?dāng)?shù),提交到系統(tǒng)中,驗證是否正確
偽代碼實現(xiàn)
生成驗證碼
String 發(fā)送驗證碼(phoneNumber) {
key = "shortMsg:limit:" + phoneNumber;
// 設(shè)置過期時間為 1 min
//使用 NX,只在不存在 key 時才能設(shè)置成功
bool r = Redis 執(zhí)行命令: set key 1 ex 60 nx
if (r == false) {
// 說明之前設(shè)置過該手機的驗證碼了
long c = Redis 執(zhí)行命令: incr key
if (c > 5) {
// 說明超過一分鐘 5 次的限制了
// 限制發(fā)送
return null;
}
}
// 說明要么之前沒有設(shè)置過手機驗證碼;要么次數(shù)沒有超過 5 次
String validationCode = 生成隨機的 6 位數(shù)的驗證碼();
validationKey = "validation:" + phoneNumber;
// 驗證碼 5 分鐘內(nèi)有效
Redis 執(zhí)行命令: set validationKey validationCode ex 300;
// 返回驗證碼
return vaildation;
}
驗證驗證碼
// 驗證用戶輸入的驗證碼是否正確
bool 驗證驗證碼(phoneNumber, vaildation) {
vaildationKey = "vaildation:" + phoneNumber;
String value = Redis 執(zhí)行命令: get vaildationKey;
if (value == null) {
// 說明沒有這個手機驗證碼記錄,驗證失敗
return false;
}
if (value == vaildationCode) {
retrurn true;
} else {
return false;
}
}
像發(fā)送短信這樣的操作,都是有專門的 SDK 來實現(xiàn)的(第三方提供的短信平臺服務(wù))(充值)
到此這篇關(guān)于redis string實現(xiàn)共享會話和手機驗證碼應(yīng)用場景的文章就介紹到這了,更多相關(guān)redis string共享會話和手機驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis分布式鎖方案設(shè)計之防止訂單重復(fù)提交或支付
這篇文章主要為大家介紹了Redis分布式鎖之防止訂單重復(fù)提交或支付方案設(shè)計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
Spring Boot整合Redis實現(xiàn)訂單超時處理問題
這篇文章主要介紹了Spring Boot整合Redis實現(xiàn)訂單超時處理,通過這個基本的示例,你可以了解如何使用Spring Boot和Redis來處理訂單超時問題,并根據(jù)需要進行擴展和定制,需要的朋友可以參考下2023-11-11
redis性能優(yōu)化之生產(chǎn)中實際遇到的問題及排查總結(jié)
這篇文章主要介紹了redis性能優(yōu)化之生產(chǎn)中實際遇到的問題及排查總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12

