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...