首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Redis 核心資料結構:跳躍表、整數集合、壓縮列表與物件系統

     編輯:關於C

跳躍表

  • 平均 O(log N) 查找,最壞 O(N);實作簡單,常替代平衡樹。
  • Redis 用於有序集合(元素多或 member 長時)與叢集節點內部結構。
  • 節點含 level[](前進指標 + 跨度)、backward(後退指標)、score、obj。
  • 層高 1~32 依冪次定律隨機生成。

整數集合

  • 底層為連續陣列 contents[],依 encoding 為 int16/int32/int64。
  • 有序、不重複、支援升級(upgrade):新元素型別較大時,整體轉型並重新排序,O(N)。
  • 不支援降級,節省記憶體同時保持彈性。

壓縮列表

  • 連續記憶體塊,節點含 previous_entry_length、encoding、content。
  • 用於列表鍵與雜湊鍵(元素少且小)。
  • 可能觸發連鎖更新(cascade update),最壞 O(N²),但實際極難觸發。

Redis 物件系統

類型編碼選項轉換條件
字串int / embstr / raw整數→int;≤32B 字串→embstr(唯讀);其餘→raw
列表ziplist / linkedlist所有元素 <64B 且 <512 個→ziplist
雜湊ziplist / hashtable鍵值長度 <64B 且 <512 對→ziplist
集合intset / hashtable全整數且 <512 個→intset
有序集合ziplist / skiplist元素 <128 且 member <64B→ziplist

多態命令與型別檢查

執行型別特定命令前,檢查 redisObject.type;再依 encoding 選擇具體實作。

記憶體回收與共享

  • 引用計數:建立=1,共享+1,釋放-1,歸零即釋放記憶體。
  • 僅共享整數字串物件(0~9999 預建立),降低記憶體佔用。

LRU 淘汰

lru 欄位記錄最後存取時間,配合 maxmemory 政策淘汰閒置鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved