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/