Redis 第8章 物件

2021-10-09 21:54:30 字數 2483 閱讀 9793

redisobject

五種物件

redis中每個物件都由redisobject結構表示,分別是type,encoding,ptr

typedef struct redisobjectrobj;
type:5種

redis_string:字串

redis_list:列表

redis_hash:雜湊表

redis_set:集合

redis_zset:有序集合

encoding:8種

int:long型別整數

embstr:字串

raw:字串

ht:dictht字典

linkedlist:雙端鍊錶

ziplist:壓縮鍊錶

intset:整數集合

skiplist:跳躍表 

string:3種

int:普通整數

embstr:<=32位元組的字串

raw(sds):>32位元組的字串

list:2種

ziplist:所有元素(stringobject)長度<64位元組並且元素數量<512

linkedlist:不滿足ziplist的條件

hash:2種

ziplist:所有key和value長度<64位元組並且鍵值對數量<512

dictht:不滿足dictht

set:2種

intset:所有都是整數且數量<512

dictht:不滿足intset

zset:2種

ziplist:所有元素長度<64位元組且數量<128

skiplist+dictht:不滿足ziplist

(1) 整數用long型別表示

(2) >32位元組的字串用raw(sds)表示

(3)<=32位元組的字串用embstr(sds)表示

與raw的區別是:embstr的redisobject和sdshdr結構只呼叫了一次記憶體分配,記憶體是連續的。釋放也只需要一次

而raw呼叫了兩次記憶體分配,因此記憶體是不連續的。釋放記憶體需要兩次

embstr是唯讀的。

其他:1.double型別的浮點數或者超出long範圍的整數,會轉化成sds來儲存。

(1)ziplist

需要滿足兩個條件:所有字串長度<64位元組並且元素數量<512

每個列表元素用entry儲存(如 1, three, 5)

不滿足ziplist的條件時會被轉換成linkedlist

需要滿足兩個條件:所有key和value長度<64位元組並且鍵值對數量<512

key和value緊挨好

不滿足ziplist會被轉化成dictht

(1)intset:整數

(2)dictht:字串(key為字串物件,value=null)

不滿足intset時會被轉換

(1)ziplist

第乙個節點儲存member,第二個節點儲存score;score從小到大排序

(2)跳躍表+dict

跳躍表:主要用於範圍型操作(zrank, zrange)

dict:主要用於對映查詢成員的score(zcore),複雜度o(1)

此外,同時用兩個資料結構不會造成額外的空間浪費,因為都是通過指標來共享同一塊記憶體區域

第15章 物件導向程式設計 8

15.4 建構函式和複製控制 建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。15.4.1基類建構函式和複製控制 某些類需要只希望派生類使用的特殊建構函式,這樣的建構函式定義為protected。15.4.2 派生類建構函式 派生類的建構函式受繼承關係的影響,每個派生類建構函...

redis學習筆記 第8章 理解記憶體

8.1 記憶體消耗 物件記憶體 物件記憶體是redis記憶體占用最大的一塊,儲存著使用者所有的資料。redis所有的資料都採用key value資料型別,每次建立鍵值對時,至少建立兩個型別物件 key物件和value物件。物件記憶體消耗可以簡單理解為sizeof keys sizeof values...

第8章(下) 物件導向程式設計(中級)

1.方法重寫 方法重寫也叫方法覆蓋,需要滿足下面的條件 1 子類的方法的引數,方法名稱,要和父類方法的引數,方法名稱完全一樣。2 子類方法的返回型別需要和父類方法返回型別一樣,或者是父類返回型別的子模擬如 父類 返回型別是 object 子類方法返回型別是string 3 子類方法不能縮小父類方法的...