redis的資料型別和底層實現

2021-10-09 06:00:55 字數 1171 閱讀 7822

string

使用sds(****** dynamic string)儲存,類似arraylist,可通過預分配冗餘空間減少記憶體的頻繁分配

簡單的key-value型別,value不僅可以是string,也可以是數字

編碼方式:raw、int、embstr

hash

hashtable、ziplist

內部包含兩個hashtable,但是只有乙個是有值的,在擴縮容時需要分配新的hashtable進行漸進式rehash

漸進式hash: 在rehash的同時保留兩個hash結構,查詢會同時查詢兩個hash結構,循序漸進將舊結構遷移到新字典,搬遷完成時會用新的結構取代

是string型別的field和value的對映表,hash比較適合用於儲存物件,後續操作的時候可以僅修改這個物件中的某個欄位的值,比如使用者資訊商品資訊等

list

ziplist , linkedlist雙端鍊錶

雙向鍊錶,可以支援反向查詢和遍歷操作方便,但是會有部分額外開銷

lrange 命令可以基於list實現分頁查詢,高效能分頁

setintset , hashtable

是一種無序集合,提供了判斷某個成員是否在乙個set集合內的重要介面,可以基於set實現交集、並集、差集的操作

sorted set (zset)

skiplist (跳躍鍊錶) ,ziplist

增加了權重引數score,是集合中的元素能按照score有序排列

skiplist:相鄰的節點之間也增加指標 ,插入時節點的層數是隨機的,插入節點只需要修改節點前後的指標,不需要對多個節點進行調整,降低了插入的複雜度,最大層數32層。

支援按bit位儲存資訊,用來實現布隆過濾器

hyperloglog

不精確的去重計數功能

geospatial

儲存地理位置

pub/sub

訂閱發布功能,可以做最簡單的訊息佇列,如果消費者下線,訊息會丟失

pipeline

可以批量執行一組指令,一次性返回全部結果,影響qps峰值的是pipeline批次指令的數目。

lua 指令碼

可以保證多個指令的原子性執行

Redis五種資料型別的底層實現總結

redis的五種資料型別 redis所用到的底層資料結構 redis並沒有直接使用以上的資料結構來實現鍵值對資料庫,而是基礎這些資料結構建立了乙個物件系統,包含 字串物件 列表物件 雜湊物件 集合物件和有序集合物件,這些物件都至少用到了一種資料結構。使用物件的優點 物件的型別和編碼 乙個鍵值對會至少...

Redis的五大資料型別的底層實現

參考 redis設計與實現 黃健巨集著,網上對redis的詳解等 redis的五大資料型別也稱五大資料物件 前面介紹過6大資料結構,redis並沒有直接使用這些結構來實現鍵值對資料庫,而是使用這些結構構建了乙個物件系統redisobject 這個物件系統包含了五大資料物件,字串物件 string 列...

numpy 資料型別c 底層實現

c 使用numpy 資料型別 include include include 定義c 資料型別 typedef struct data 定義python 資料型別 typedef struct py data 定義python 資料成員 pymemberdef py data member pyty...