Redis,是網際網路技術架構在儲存系統中使用最為廣泛的中介軟體,它也是工程師技術面試中最喜歡問的技能之一,特別是那些優秀的、競爭激烈的大型網際網路公司(比如 Twitter、新浪微博、阿里雲、騰訊雲、淘寶、知乎等),通常要求面試者不僅僅掌握Redis基礎使用,更要求深層理解Redis內部實現的細節原理。毫不誇張地說,能把Redis的知識點全部吃透,你的半隻腳就已經踏進心儀公司的大門!
所以小編給大家整理了這份《Redis深度歷險》檔案,並且將從目錄,前言,主要內容,這三個部分大家講解這本檔案,同時希望對各位大哥朋友們有點作用,也希望你們會喜歡!最後,有需要這篇《Redis深度歷險》檔案的朋友們只需要點點關注+轉發,掃描小編的二維條碼即可免費獲取聯絡方式~
這篇《Redis深度歷險:核心原理和應用實踐》,主要分為五個部分,為應用篇,原理篇,叢集篇,拓展篇,原始碼篇,所以接下來,小編就每篇仔細的展開來詳細的為大家講解一下這本書的知識點!
開篇
基礎
部分知識點:
應用1:千帆競發——分散式鎖
應用4:四兩撥千斤—— HyperLogLog
這一節我們可以學會使用HyperLogLog資料結構來進行估數,它非常有價值,可以解決很多精確度不高的統計需求。
應用5:層巒疊嶂——布隆過濾器
應用7∶一毛不拔——漏斗限流
漏斗限流是最常用的限流方法之一,顧名思義,這個演演算法的靈感源於漏斗(funnel)的結構。
應用8∶近水樓臺—— GeoHash
Redis在3.2版本以後增加了地理位置GEO模組,意味著我們可以使用Redis來實現摩拜單車「附近的Mobike」、美團和餓了麼「附近的餐館」這樣的功能了。
部分知識點:
原理3∶未雨綢繆——持久化
Redis的資料全部在記憶體裡,如果突然宕機,資料就會全部丟失,因此必須有一種機制來保證Redis的資料不會因為故障而丟失,這種機制就是Redis的持久化機制。
原理4∶雷厲風行——管道
大家一直以來對Redis管道有一個誤解,他們以為這是Redis伺服器提供的一種特別的技術,有了這種技術就可以加速Redis的存取效率。但是實際上Redis管道(Pipelinc)本身並不是Redis伺服器直接提供的技術,這個技術本質上是由使用者端提供的,跟伺服器沒有什麼直接的關係。下面我們對這塊做一個深入探究。
原理6:小道訊息—PubSub
前面我們講了 Redis 訊息佇列的使用方法,但是沒有提到Redis訊息佇列的不足之處,那就是它不支援訊息的多提機制。
原理8∶有備無患——主從同步
很多企業都沒有使用到Redis的叢集,但是至少都做了主從。有了主從,當master掛掉的時候,運維讓從庫過來接管,服務就可以繼續,否則master需要經過資料恢復和重新啟動的過程,這就可能會拖很長的時間,影響線上業務的持續服務。
部分知識點:
叢集2:分而治之——Codis
叢集3∶眾志成城——Cluster
部分知識點:
拓展1:耳聽八方——Stream
Redis5.0 被作者Antirez突然放了出來,增加了很多新的特色功能。而Redis5.0最大的新特性就是多出了一個資料結構Stream,它是一個新的強大的支援多播的可持久化的訊息佇列,作者坦言Redis Strcam狠狠地借鑑了Kafka的設計。
拓展3:拾遺漏補——再談分散式鎖
在第三節,我們細緻講解了分散式鎖的原理,它的使用非常簡單,一條指令就可以完成加鎖操作。不過在叢集環境下,這種方式是有缺陷的,它不是絕對安全的。
拓展6:平波緩進———懶惰刪除
一直以來我們認為Redis是單執行緒的,單執行緒為Redis帶來了程式碼的簡潔性和豐富多樣的資料結構。不過Redis 內部實際上並不是只有一個主執行緒,它還有幾個非同步執行緒專門用來處理一些耗時的操作。
拓展9∶隔牆有耳——Redis安全通訊
原始碼1∶極度課寒——探案「字串」內部結構
Redis中的字串是可以修改的字串,在記憶體中它是以位元組陣列的形式存在的。我們知道C語言裡面的字串標準形式是以NULL作為結束符,但是在Redis裡面字串不是這麼表示的。因為要獲取NULL結尾的字串的長度使用的是strlen標準庫函數,這個函數的演演算法複雜度是O(n),它需要對位元組陣列進行遍歷掃描,作為單執行緒的Redis表示承受不起。
原始碼3∶極度課寒——探索「壓縮列表」內部
Redis為了節約記憶體空間使用,set 和hash容器物件在元素個數較少的時候,採用壓縮列表(ziplist)進行儲存。壓縮列表是一塊連續的記憶體空間,元素之間緊挨著儲存,沒有任何冗餘空隙。
原始碼5∶極度深寒——探案「跳躍列表」內部結構
Redis的zset是一個複合結構,一方面它需要一個hash結構來儲存value和score的對應關係,另一方面需要提供按照seore來排序的功能,還需要能夠指定 score的範圍來獲取valuc列表的功能,這就需要另外一個結構「跳躍列表」-
原始碼7∶極度深寒——探索「甚數樹」內部
Rax是Redis內部比較特殊的一個資料結構,它是一個有序字典樹〔基數樹RadixTrec),按照key的字典序排列,支援快速的定位、插入和刪除操作。
點贊+關注+轉發,掃描下方小編二維條碼即可免費獲取這份《Redis深度歷險 核心原理和應用實踐》檔案的領取方式!!!