redis記憶體編碼資料結構(整數集合 壓縮列表)

2021-07-12 01:01:25 字數 831 閱讀 5376

整數集合(intset)是 redis 用於儲存整數值的集合抽象資料結構, 它可以儲存型別為 int16_t 、 int32_t 或者 int64_t 的整數值, 並且保證集合中不會出現重複元素。

typedef struct intset  intset;
乙個整數集合示例,包含五個 int16_t 型別的整數值

每當我們要將乙個新元素新增到整數集合裡面, 並且新元素的型別比整數集合現有所有元素的型別都要長時, 整數集合需要先進行公升級(upgrade), 然後才能將新元素新增到整數集合裡面。

公升級整數集合並新增新元素共分為三步進行:

①根據新元素的型別, 擴充套件整數集合底層陣列的空間大小, 並為新元素分配空間。

②將底層陣列現有的所有元素都轉換成與新元素相同的型別, 並將型別轉換後的元素放置到正確的位上, 而且在放置元素的過程中, 需要繼續維持底層陣列的有序性質不變。

③將新元素新增到底層陣列裡面。

因為每次向整數集合新增新元素都可能會引起公升級, 而每次公升級都需要對底層陣列中已有的所有元素進行型別轉換, 所以向整數集合新增新元素的時間複雜度為 o(n) 。

整數集合的公升級策略有兩個好處:提公升整數集合的靈活性, 盡可能地節約記憶體。

整數集合不支援降級操作,一旦對陣列進行了公升級,編碼就會一直保持公升級後的狀態。

Huffman編碼 資料結構

include include include class data typedef class huffman huffmantree typedef char huffmancode 在陣列中選擇兩個小的權的資料 void select int tw,int n,int s1,int s2 te...

哈夫曼編碼 資料結構

上週日做了資料結構實驗報告,感覺還行。一 課題描述 二 概要設計 主要思想應根據 執行順序了解 1 資料邏輯結構 主要是樹形結構,也有使用線性結構作為輔助 儲存結構分析 主要是非線性結構 二叉樹 結點 struct hufftree 2 本程式包含8個函式 1 將資料樹化函式hufftree cre...

WPF Silverlight程式編碼資料收集

一.獲取路徑資訊 序路徑的,應該這樣用 mycollection system curdirectory system.io.path.getdirectoryname process.getcurrentprocess mainmodule.filename 二 獲取silverlight.web...