Redis学习笔记之Redis的对象
類型與編碼:
typedef struct redisObject {
? ???????????? unsigned type:4;//類型
????????????? unsigned encoding:4;//編碼
????????????? void *ptr;//指向底層實現數據結構的指針
} robj;
1.字符串對象
編碼: int,整數值,而且這個整數值可以用long類型來表示
raw,字符串值,而且字符串值的長度大于32字節,SDS的內存與redisObject內存不連續
embstr,字符串值,而且字符串值的長度小于32字節,SDS的內存與redisObject內存是連續的
? ????? 編碼轉換:當對字符串進行操作時引起字符串類型變化,那么字符串對象的編碼也會隨即改變,比如在一個10后面加上“days ago”,那么字符串的編碼將從int變為raw
2.列表對象
編碼: ziplist,需滿足以下兩個條件1)列表對象保存的所有字符串元素的長度都小于64字節(可修改);2)列表對象保存的元素數量小于512個(可修改)
? ?????? ? linkedlist,不滿足上述兩個條件的列表對象編碼都采用linkedlist
筆者實際操作之后發現,不管什么情況,結果都如下:
127.0.0.1:6379> object encoding test
"quicklist"
??? ??? quicklist:A doubly linked list of ziplists,一個ziplist的雙向鏈表
3.哈希對象
編碼: ziplist,先將一個鍵值對的鍵推到表尾,然后將這個鍵值對的值推到表尾,同樣需要滿足以下兩個條件1)哈希對象保存的所有鍵值對的鍵和值得字符串長度都小于64(可修改)字節2)哈希對象保存的鍵值對的數量小于512(可修改)
? ? ? hashtable,底層采用字典實現
4.集合對象
編碼:intset,集合對象使用整數集合作為底層實現,條件1)集合對象保存的所有元素都是整數2)集合對象保存的元素個數不超過512個
? ? ? hashtable,使用字典作為底層實現,字典的每一個值都是一個字符串對象,每個字符串對象都包含一個集合元素,字典的值全部為null
5.有序集合對象
編碼:ziplist,使用壓縮列表作為底層實現,要求1)有序集合保存的元素數量小于128,2)有序集合保存的所有元素成員的長度都小于64字節
? ? ? skiplist,使用zset作為底層實現,一個zset結構同時包含一個字典和一個跳躍表;同時使用字典和跳躍表是為了1)保留字典以O(1)的時間復雜度查找成員的分值這一特性2)保留跳躍表執行范圍型操作的優點
轉載于:https://www.cnblogs.com/songxh-scse/p/6692433.html
總結
以上是生活随笔為你收集整理的Redis学习笔记之Redis的对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 良好编程习惯的养成
- 下一篇: linux cmake编译源码,linu