Redis基本資料結構及底層實現

2022-09-28 04:00:12 字數 1464 閱讀 6155

redis 所有值物件在內部都定義為 redisobject

typedef struct redisobject
redis字串物件(sds)

struct sdshdr;
intset

typedef struct intset
ziplist

type struct ziplist;
hashtable

typedef struct dictht
skiplist

typedef struct zskiplistnode level;

//後退指標

struct zskiplistnode *backward;

//分值

double score;

//成員物件

一、字串(string 最大512m) 

內部編碼:(檢視內部編碼命令 object encode 鍵值)

int:8個位元組的長整形

embstr:小於等於某個值(39個)位元組的字串

raw:大於某個值(39個)位元組的字串

二、雜湊(hash)

內部編碼:

ziplist:當元素個數小於某個值(hash-max-ziplist-entries 預設512),同時每個元素占用記憶體都小於某個值(hash-max-ziplist-value 預設64位元組)redis使用ziplist節省記憶體

hashtable:不滿足ziplist的條件就用hashtable

三、列表(list)

內部編碼:

ziplist:當元素個數小於某個值(list-max-ziplist-entries 預設512),同時每個元素占用記憶體都小於某個值(list-max-ziplist-value 預設64位元組)redis使用ziplist節省記憶體

linkedlist:不滿足ziplist的條件就用hashtable

四、集合(set)

內部編碼:

intset:當集合中的元素都是整數且元素個數小於某個值(set-max-intset-entries 預設512)時 ,使用intset節省記憶體

hashtable:不滿足intset的條件就用hashtable

五、有序集合(zset)

內部編碼:

ziplist:當元素個數小於某個值(zset-max-ziplist-entries 預設128),同時每個元素占用記憶體都小於某個值(zset-max-ziplist-value 預設64位元組)redis使用ziplist節省記憶體

skiplist:不滿足ziplist的條件就用skiplist

redis 基本資料型別及底層資料結構

1.redis 基本資料型別每種資料型別都對應兩種及以上資料結構,同一型別不同條件底層資料結構不同 檢視key對應的value編碼型別使用object encoding key 1.string string 型別有embstr和raw,int三種型別 當set的是int時,底層儲存的是int 當s...

redis基本資料結構 1

redis的作者為了方便自己的使用,在redis中定義了動態字串sds,鍊錶,字典dict,跳躍表skiplist,整數集合intset和壓縮列表ziplist這六種資料結構。下文,我簡要地介紹一下幾種資料結構的定義。sds的全稱叫 dynamic string,它的定義和注釋如下 struct s...

redis基本資料結構概述

redis 有 5 種基礎資料結構,分別為 string 字串 list 列表 hash 雜湊 set 集合 和 zset 有序集合 以下圖示並不代表記憶體連續,僅僅只是邏輯表述。因為redis的key值為字串,當我們使用字串型別作為value時,我們是在將乙個字串對映另乙個字串。member是不可...