redisobjectredis中每個物件都由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 子類方法不能縮小父類方法的...