文章目錄
- 🍃前言
- 🌴內部編碼
- 🎄典型使用場景
- 🚩緩存功能
- 🚩計數(Counter)功能
- 🚩共享會話(Session)
- 🚩驗證碼功能
- ?總結
🍃前言
本篇文章重點內容如下:
- 了解String類型的三種內部編碼
- 了解String類型的典型使用環境
🌴內部編碼
雖然我們使用的是 String 類型的數據,但是Redis底層是如何存儲的呢?
起始 Reids 對字符串類型的有三種內部編碼方式:
- int:8 個字節的?整型。
- embstr:?于等于 39 個字節的字符串。
- raw:?于39 個字節的字符串。
🎄典型使用場景
🚩緩存功能
緩存功能是?較典型的緩存使?場景,其中 Redis 作為緩沖層,MySQL 作為存儲層,絕?部分請求的數據都是從 Redis 中獲取。由于 Redis 具有?撐?并發的特性,所以緩存通常能起到加速讀寫和降低后端壓?的作?
🚩計數(Counter)功能
許多應?都會使? Redis 作為計數的基礎?具,它可以實現快速計數、查詢緩存的功能,同時數據可以異步處理或者落地到其他數據源。
例如視頻?站的視頻播放次數可以使? Redis 來完成:??每播放?次視頻,相應的視頻播放數就會?增 1。
🚩共享會話(Session)
?個分布式 Web 服務將??的 Session 信息(例如??登錄信息)保存在各?的服務器中,但這樣會造成?個問題:出于負載均衡的考慮,分布式服務會將??的訪問請求均衡到不同的服務器上,并且通常?法保證??每次請求都會被均衡到同?臺服務器上,這樣當??刷新?次訪問是可能會發現需要重新登錄,這個問題是???法容忍的。
為了解決這個問題,可以使? Redis 將??的 Session 信息進?集中管理,在這種模式下,只要保證 Redis 是?可?和可擴展性的,?論??被均衡到哪臺Web 服務器上,都集中從 Redis 中查詢、更新 Session 信息。
🚩驗證碼功能
很多應?出于安全考慮,會在每次進?登錄時,讓??輸??機號并且配合給?機發送驗證碼,然后讓??再次輸?收到的驗證碼并進?驗證,從?確定是否是??本?。為了短信接?不會頻繁訪問,會限制??每分鐘獲取驗證碼的頻率,例如?分鐘不能超過 5 次。此功能也可使用Redis來進行實現
偽代碼實現如下:
String 發送驗證碼(phoneNumber) {key = "shortMsg:limit:" + phoneNumber;// 設置過期時間為 1 分鐘(60 秒)// 使? NX,只在不存在 key 時才能設置成功bool r = Redis 執?命令:set key 1 ex 60 nxif (r == false) {// 說明之前設置過該?機的驗證碼了long c = Redis 執?命令:incr keyif (c > 5) {// 說明超過了?分鐘 5 次的限制了// 限制發送return null;}}// 說明要么之前沒有設置過?機的驗證碼;要么次數沒有超過 5 次String validationCode = ?成隨機的 6 位數的驗證碼();validationKey = "validation:" + phoneNumber;// 驗證碼 5 分鐘(300 秒)內有效Redis 執?命令:set validationKey validationCode ex 300;// 返回驗證碼,隨后通過?機短信發送給??return validationCode ;
}
// 驗證??輸?的驗證碼是否正確
bool 驗證驗證碼(phoneNumber, validationCode) {validationKey = "validation:" + phoneNumber;String value = Redis 執?命令:get validationKey;if (value == null) {// 說明沒有這個?機的驗證碼記錄,驗證失敗return false;}if (value == validationCode) {return true;} else {return false;}
}
?總結
關于《【Redis】 String類型的內部編碼與使用環境》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關注,點贊,收藏支持一下