共計(jì) 1395 個(gè)字符,預(yù)計(jì)需要花費(fèi) 4 分鐘才能閱讀完成。
自動(dòng)寫代碼機(jī)器人,免費(fèi)開通
了解 Redis 在項(xiàng)目中的應(yīng)用場(chǎng)景有哪些?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是丸趣 TV 小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
Redis 是一個(gè)開源的底層使用 C 語言編寫的 key-value 存儲(chǔ)數(shù)據(jù)庫(kù)。可用于緩存、事件發(fā)布訂閱、高速隊(duì)列等場(chǎng)景。而且支持豐富的數(shù)據(jù)類型:string(字符串)、hash(哈希)、list(列表)、set(無序集合)、zset(sorted set:有序集合)
Redis 在項(xiàng)目中的應(yīng)用場(chǎng)景
1、緩存數(shù)據(jù)
最常用,對(duì)經(jīng)常需要查詢且變動(dòng)不是很頻繁的數(shù)據(jù) 常稱作熱點(diǎn)數(shù)據(jù)。
2、消息隊(duì)列
相當(dāng)于消息訂閱系統(tǒng),比如 ActiveMQ、RocketMQ。如果對(duì)數(shù)據(jù)有較高一致性要求時(shí),還是建議使用 MQ)
3、計(jì)數(shù)器
比如統(tǒng)計(jì)點(diǎn)擊率、點(diǎn)贊率,redis 具有原子性,可以避免并發(fā)問題
4、電商網(wǎng)站信息
大型電商平臺(tái)初始化頁(yè)面數(shù)據(jù)的緩存。比如去哪兒網(wǎng)購(gòu)買機(jī)票的時(shí)候首頁(yè)的價(jià)格和你點(diǎn)進(jìn)去的價(jià)格會(huì)有差異。
5、熱點(diǎn)數(shù)據(jù)
比如新聞網(wǎng)站實(shí)時(shí)熱點(diǎn)、微博熱搜等,需要頻繁更新。總數(shù)據(jù)量比較大的時(shí)候直接從數(shù)據(jù)庫(kù)查詢會(huì)影響性能
Redis 數(shù)據(jù)類型的應(yīng)用場(chǎng)景
前面提到了 Redis 支持五種豐富的數(shù)據(jù)類型,那么在不同場(chǎng)景下我們?cè)撛趺催x擇呢?
1、String
字符串是最常用的數(shù)據(jù)類型,他能夠存儲(chǔ)任何類型的字符串,當(dāng)然也包括二進(jìn)制、JSON 化的對(duì)象、甚至是 base64 編碼之后的圖片。在 Redis 中一個(gè)字符串最大的容量為 512MB,可以說是無所不能了。
2、Hash
常用作存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)、比如論壇系統(tǒng)中可以用來存儲(chǔ)用戶的 Id、昵稱、頭像、積分等信息。如果需要修改其中的信息,只需要通過 Key 取出 Value 進(jìn)行反序列化修改某一項(xiàng)的值,再序列化存儲(chǔ)到 Redis 中,Hash 結(jié)構(gòu)存儲(chǔ),由于 Hash 結(jié)構(gòu)會(huì)在單個(gè) Hash 元素在不足一定數(shù)量時(shí)進(jìn)行壓縮存儲(chǔ),所以可以大量節(jié)約內(nèi)存。這一點(diǎn)在 String 結(jié)構(gòu)里是不存在的。
3、List
List 的實(shí)現(xiàn)為一個(gè)雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內(nèi)存開銷,Redis 內(nèi)部的很多實(shí)現(xiàn),包括發(fā)送緩沖隊(duì)列等也都是用的這個(gè)數(shù)據(jù)結(jié)構(gòu)。另外,可以利用 lrange 命令,做基于 Redis 的分頁(yè)功能,性能極佳,用戶體驗(yàn)好。
4、Set
set 對(duì)外提供的功能與 list 類似是一個(gè)列表的功能,特殊之處在于 set 是可以自動(dòng)排重的,當(dāng)你需要存儲(chǔ)一個(gè)列表數(shù)據(jù),又不希望出現(xiàn)重復(fù)數(shù)據(jù)時(shí),這個(gè)時(shí)候就可以選擇使用 set。
5、Sort Set
可以按照某個(gè)條件的權(quán)重進(jìn)行排序,比如可以通過點(diǎn)擊數(shù)做出排行榜的數(shù)據(jù)應(yīng)用。
Redis 特點(diǎn):
1、Redis 是純內(nèi)存操作,需要的時(shí)候需要我們手動(dòng)持久化到硬盤中
2、Redis 是單線程,從而避開了多線程中上下文頻繁切換的操作。
3、Redis 數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單、對(duì)數(shù)據(jù)的操作也比較簡(jiǎn)單
4、使用底層模型不同,它們之間底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣,Redis 直接自己構(gòu)建了 VM 機(jī)制,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求
5、使用多路 I / O 復(fù)用模型,非阻塞 I /O
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì) Redis 在項(xiàng)目中的應(yīng)用場(chǎng)景有哪些大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。
向 AI 問一下細(xì)節(jié)
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!