Redis設計與實現 學習筆記

來源:互聯網
上載者:User

Redis設計與實現 學習筆記
寫在前面

這本書主要是講Redis底層的實現,總體上分為四部分:

  1. 資料結構與對象
  2. 單機資料庫的實現
  3. 多機資料庫的實現
  4. 獨立功能的實現

這個順序和作者自己學習的順序應該是一致的,但是感覺有一點不合理:在剛開始看的時候一直比較著急,因為是在對Redis整體上沒有概念的情況下看細節。

Redis設計與實現 第二版 高清PDF 下載 

學習筆記

在Redis中鍵為字串、值為對象,底層處理用到的資料結構有:

  1. 動態字串:使用預分配和惰性釋放來減少記憶體操作次數
  2. 鏈表
  3. 字典:漸進式rehash防止卡住
  4. 跳躍表
  5. 整數集合:有序、不重複的整數集合,在必要的時候升級來節約記憶體
  6. 壓縮列表:連續記憶體儲存整數或位元組的列表,通過壓縮來節省記憶體
  7. 對象:在Redis中都是對象,實現基於上面的資料結構

由於Redis是用C編寫的,沒有記憶體回收機制,因此在對象系統中構建了一個引用計數實現記憶體回收器,通過該機制,程式可以通過跟蹤對象的引用計數資訊,在適當的時候自動釋放對象並進行記憶體回收。

有了這些基礎就可以開始看Redis作為一個伺服器是如何工作的:

                  +-------------+                                     | redisServer |                                     +------+------+                                            |                          +-----------+     +------+------+      +-----------+|redisClient+-----+   redisDb   +--+---+    dict   |+-----------+     +-------------+  |   +-----------+                  |   redisDb   |  |                                  +-------------+  |   +-----------+                  |   redisDb   |  +---+  expires  |                  +-------------+      +-----------+

其中:

  1. dict:鍵空間
  2. expires:鍵的到期時間

還有另外一種做到期時間的方法是:對dict上的鍵做擴充,增加到期時間欄位。和Redis的做法相比可能有幾個缺點:浪費空間、遍曆時浪費時間、結構不清晰。到期鍵的刪除有三種策略:

  1. 定時刪除:在設定鍵的到期時間時建立Timer,當Timer運行時執行刪除操作
  2. 惰性刪除:在取值時判斷是否到期,如果到期則刪除
  3. 定期刪除:每隔一段時間對資料庫進行檢查掃描,刪除裡面到期的鍵

定時刪除顯然不靠譜,在Redis中同時使用了定期刪除和惰性刪除,當然在持久化程式中也需要考慮到期時間。

下面關於Redis的文章您也可能喜歡,不妨參考下:

Ubuntu 14.04下Redis安裝及簡單測試

Redis主從複製基本配置

Redis叢集明細文檔

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis

Redis系列-安裝部署維護篇

CentOS 6.3安裝Redis

Redis安裝部署學習筆記

Redis設定檔redis.conf 詳解

Redis 的詳細介紹:請點這裡
Redis 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.