Redis是一個開源的 key-value 存儲系統,它使用六種底層數據結構構建了包含字元串對象、列表對象、哈希對象、集合對象和有序集合對象的對象系統。今天我們就通過12張圖來全面瞭解一下它的數據結構和對象系統的實現原理。
本文的內容如下:
- 首先介紹六種基礎數據結構:動態字元串,鏈表,字典,跳躍表,整數集合和壓縮列表。
- 其次介紹 Redis 的對象系統中的字元串對象(String)、列表對象(List)、哈希對象(Hash)、集合對象(Set)和有序集合對象(ZSet)
- 最後介紹 Redis 的鍵空間和過期鍵( expire )實現。
數據結構
簡單動態字元串
Redis 使用動態字元串 SDS 來表示字元串值。下圖展示了一個值為 Redis 的 SDS結構 :
- len: 表示字元串的真正長度(不包含NULL結束符在內)。
- alloc: 表示字元串的最大容量(不包含最後多餘的那個位元組)。
- flags: 總是佔用一個位元組。其中的最低3個bit用來表示header的類型。
- buf: 字元數組。