緩存中間件Redis進階之路一(Redis的描述)

Redis(Remote Dictionary Server)是一個基于BSD開源的項目,同時也是一個基于內存的Key-Value結構化存儲的存儲系統(tǒng)。在實際生產環(huán)境中可以將其作為數(shù)據(jù)庫、緩存和消息中間件來使用。

Redis是如今市面上應用很廣泛的緩存中間件,它支持多種數(shù)據(jù)結構,包括字符串String、列表List、集合Set、有序集合Sorted Set和散列Hash等,在實際業(yè)務環(huán)境中可以實現(xiàn)類似于熱點數(shù)據(jù)存儲、非結構化數(shù)據(jù)存儲和消息分發(fā)等功能。而在如今高并發(fā)、低延遲等架構流行的時代,Redis的出現(xiàn)可以說是帶來了很大的貢獻。

進階之路涉及的內容主要有:

Redis簡述:包括Redis的基本概念、典型應用場景介紹,以及在Windows開發(fā)環(huán)境下的簡單使用。
Spring Boot整合Redis:使用StringRedisTemplate及RedisTemplate組件編寫Hello World,初步感受Redis在實際微服務項目中的應用。
基于微服務項目舉例Redis各種典型的數(shù)據(jù)結構。
以一個典型的實際業(yè)務場景為案例“實戰(zhàn)”Redis,鞏固Redis在實際互聯(lián)網項目中的應用。
Redis概述與典型應用場景介紹
Redis是一款免費、開源、遵循BSD協(xié)議的高性能結構化存儲數(shù)據(jù)庫,可以滿足目前企業(yè)大部分應用中對于高性能數(shù)據(jù)存儲的需求。同時,它也是NoSQL(Not Only SQL),即非關系型數(shù)據(jù)庫的一種,內置多種豐富多彩的數(shù)據(jù)結構,如字符串String、列表List、集合Set、散列Hash等,可以高效地解決企業(yè)應用頻繁讀取數(shù)據(jù)庫而帶來的諸多問題。

Redis的誕生其實還得追溯到Web 2.0網站的時代?;ヂ?lián)網Web 2.0時代,可以說是“百花齊放”的時代,其中的典型之物當屬各種基于內容、服務模式產品的誕生。這些產品的出現(xiàn),在給人們的生活及思想帶來一定沖擊時,也給企業(yè)帶來了巨大的用戶流量。

眾所周知,在早期的互聯(lián)網Web 1.0時代,大部分企業(yè)還是采用傳統(tǒng)的企業(yè)級單體應用架構,而一時間“蜂擁而來”的巨大用戶流量顯然使得此種架構再也難以支撐下去。此時各種典型的新型互聯(lián)網架構應勢而生,如面向SOA的系統(tǒng)架構、分庫分表的應用架構、微服務/分布式系統(tǒng)架構,以及基于各種分布式中間件的應用架構等層出不窮。

在諸多系統(tǒng)架構實施及對巨大用戶流量的分析過程中發(fā)現(xiàn),其實用戶的“讀”請求遠遠多于用戶的“寫”請求,頻繁的讀請求在高并發(fā)的情況下會增加數(shù)據(jù)庫的壓力,導致數(shù)據(jù)庫服務器的整體壓力上升,這也是早期很多互聯(lián)網產品在面對高并發(fā)時經常出現(xiàn)“響應慢”、“卡住”等用戶體驗差的原因。

為了解決這個問題,許多架構引入了緩存組件,Redis即為其中的一種。它可以很好地將用戶頻繁需要讀取的數(shù)據(jù)存放至緩存中,減少數(shù)據(jù)庫的I/O(輸入/輸出)操作,降低了服務器整體的壓力。

由于Redis是基于內存的、采用Key-Value結構化存儲的NoSQL數(shù)據(jù)庫,加上其底層采用單線程和多路I/O復用模型,所以Redis的查詢速度很快。根據(jù)Redis官方提供的數(shù)據(jù),它可以實現(xiàn)每秒查詢的次數(shù)達到10萬次,即QPS為100000+,這在某種程度上足以滿足大部分的高并發(fā)請求。

而隨著微服務、分布式系統(tǒng)架構時代的到來,如今Redis在各大知名互聯(lián)網產品中也得到了一席施展之地。比如大家都知曉的淘寶、天貓、京東、QQ、新浪微博、今日頭條和抖音等App應用,其背后系統(tǒng)架構中分布式緩存的實現(xiàn)或多或少都可以見到Redis的蹤影。概括來講,Redis具有以下4種典型的應用場景。

1.熱點數(shù)據(jù)的存儲與展示

“熱點數(shù)據(jù)”可以理解為大部分用戶頻繁訪問的數(shù)據(jù),這些數(shù)據(jù)對于所有的用戶來說,訪問將得到同一個結果,比如“微博熱搜”(每個用戶在同一時刻的熱搜是一樣的),如果采用傳統(tǒng)的“查詢數(shù)據(jù)庫”的方法獲取熱點數(shù)據(jù),將大大增加數(shù)據(jù)庫的壓力,而降低數(shù)據(jù)庫的讀寫性能。

2.最近訪問的數(shù)據(jù)

用戶最近訪問過的數(shù)據(jù)記錄在數(shù)據(jù)庫中將采用“日期字段”作為標記,頻繁查詢的實現(xiàn)是采用該日期字段與當前時間做“時間差”的比較查詢,這種方式是相當耗時的。而采用Redis的List作為“最近訪問的足跡”的數(shù)據(jù)結構,將大大降低數(shù)據(jù)庫頻繁的查詢請求。

3.并發(fā)訪問

對于高并發(fā)訪問某些數(shù)據(jù)的情況,Redis可以將這些數(shù)據(jù)預先裝載在緩存中,每次高并發(fā)過來的請求則可以直接從緩存中獲取,減少高并發(fā)訪問給數(shù)據(jù)庫帶來的壓力。

4.排名

“排行榜”在很多互聯(lián)網產品中也是比較常見的。采用Redis的有序集合(Sorted Set)可以很好地實現(xiàn)用戶的排名,避免了傳統(tǒng)的基于數(shù)據(jù)庫級別的Order By及Group By查詢所帶來的性能問題。

除此之外,Redis還有諸多應用場景,比如消息隊列、分布式鎖等。在后面的篇章中,會選取幾種典型的應用場景結合實際的微服務項目,以代碼實例的方式來實現(xiàn)。

Redis的使用
接下來我們進入實際的微服務項目以代碼的形式講解Redis的使用。將首先介紹如何在本地開發(fā)環(huán)境下快速安裝Redis,以及如何使用簡單的命令行實現(xiàn)Redis的相關操作。在前面文章中,已經采用Spring Boot搭建了一個微服務項目,下節(jié)將整合Redis,介紹其在實際項目中的兩個核心操作組件StringRedisTemplate及RedisTemplate的自定義注入配置。

轉載請帶鏈接:9im博客 ? SpringBoot項目搭建流程
https://www.9im.cn/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容