天天看點

【Redis破障之路】一:強大的Redis序-為什麼要學Redis1、Redis簡介2、Redis的應用場景3、Redis各版本特性

【Redis破障之路】一:強大的Redis序-為什麼要學Redis1、Redis簡介2、Redis的應用場景3、Redis各版本特性

序-為什麼要學Redis

和隔壁組的老哥聊天,老哥最近面了十幾個候選人,他覺得合格的隻有四五個。我問他主要問了什麼?他重點提到了Redis。

提到這,他忍不住吐槽:“他們很多人Redis真的不行,問他們Redis主從、哨兵、叢集什麼的都答不上來。基本上就用過一些封裝的api,也敢寫熟悉。”

聽到這,我也有點不好意思,這些東西我也不太清楚,我也隻是個隻會調api的crud仔,要是現在在他手下面試,基本會被挂掉吧。

而且Redis這東西還真的不是“造火箭”的範疇,這個老哥他們組的業務大量用到了Redis,而且和資料庫不同,Redis是沒有專門的運維人員的,資料遷移、故障排查等等運維工作都是由開發來完成的。

是以對開發人員,Redis不應該是一個api包裹的黑箱,而要打破認知的障礙,深入學習Redis,積蓄進步的力量。

1、Redis簡介

Redis[1]是一種基于鍵值對(key-value)的NoSQL資料庫,與很多鍵值對資料庫不同的是,Redis中的值可以是由string(字元串)、hash(哈希)、

list(清單)、set(集合)、zset(有序集合)、Bitmaps(位圖)、 HyperLogLog、GEO(地理資訊定位)等多種資料結構和算法組成,是以

Redis可以滿足很多的應用場景,而且因為Redis會将所有資料都存放在記憶體中,是以它的讀寫性能非常驚人。不僅如此,Redis還可以将記憶體的資料利

用快照和日志的形式儲存到硬碟上,這樣在發生類似斷電或者機器故障的時 候,記憶體中的資料不會“丢失”。

除了上述功能以外,Redis還提供了鍵過期、釋出訂閱、事務、流水線、Lua腳本等附加功能。總之,如果在合适的場景使用好Redis,它就會像一把瑞士軍刀一樣所向披靡。

國内外很多大型網際網路公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娛樂、Github、StackOverflow、騰訊、阿裡、京東、華為、新浪微網誌等等,很多中小型公司也都有應用。也可以說,對 Redis 的了解和應用實踐已成為當下中進階後端開發者繞不開的必備技能。

2、Redis的應用場景

2.1、緩存

緩存機制幾乎在所有的大型網站都有使用,合理地使用緩存不僅可以加快資料的通路速度,而且能夠有效地降低後端資料源的壓力。Redis提供了鍵值過期時間設定,并且也提供了靈活控制最大記憶體和記憶體溢出後的淘汰政策。可以這麼說,一個合理的緩存設計能夠為一個網站的穩定保駕護航。

2.2、排行榜系統

排行榜系統幾乎存在于所有的網站,例如按照熱度排名的排行榜,按照釋出時間的排行榜,按照各種複雜次元計算出的排行榜,Redis提供了清單和有序集合資料結構,合理地使用這些資料結構可以很友善地建構各種排行榜系統。

2.3、計數器應用

計數器在網站中的作用至關重要,例如視訊網站有播放數、電商網站有浏覽數,為了保證資料的實時性,每一次播放和浏覽都要做加1的操作,如果并發量很大對于傳統關系型資料的性能是一種挑戰。Redis天然支援計數 功能而且計數的性能也非常好,可以說是計數器系統的重要選擇。

2.4、社交網絡

贊/踩、粉絲、共同好友/喜好、推送、下拉重新整理等是社交網站的必備功 能,由于社交網站通路量通常比較大,而且傳統的關系型資料不太适合儲存這種類型的資料,Redis提供的資料結構可以相對比較容易地實作這些功能。

2.5、消息隊列系統

消息隊列系統可以說是一個大型網站的必備基礎元件,因為其具有業務解耦、非實時業務削峰等特性。Redis提供了釋出訂閱功能和阻塞隊列的功能,雖然和專業的消息隊列比還不夠足夠強大,但是對于一般的消息隊列功能基本可以滿足。

2.6、分布式鎖與單線程機制

  • 驗證前端的重複請求(可以自由擴充類似情況),可以通過redis進行過濾:每次請求将request Ip、參數、接口等hash作為key存儲redis(幂等性請求),設定多長時間有效期,然後下次請求過來的時候先在redis中檢索有沒有這個key,進而驗證是不是一定時間内過來的重複送出
  • 秒殺系統,基于redis是單線程特征,防止出現資料庫“爆破”
  • 全局增量ID生成,類似“秒殺”

3、Redis各版本特性

Redis借鑒了Linux作業系統對于版本号的命名規則:版本号第二位如果是奇數,則為非穩定版本(例如2.7、2.9、3.1),如果是偶數,則為穩定版本(例如2.6、2.8、3.0、3.2)。

Redis重要版本時間軸如下:

【Redis破障之路】一:強大的Redis序-為什麼要學Redis1、Redis簡介2、Redis的應用場景3、Redis各版本特性

其中Redis3.0是一個重要的版本,添加Redis的分布式實作Redis Cluster,填補了 Redis官方沒有分布式實作的空白。