整数集合
整數集合
整數集合的升級
升級整數集合并添加新元素的步驟:
1、根據新元素的類型, 擴展整數集合底層數組的空間大小, 并為新元素分配空間。
2、將底層數組現有的所有元素都轉換成與新元素相同的類型, 并將類型轉換后的元素放置到正確的位上, 而且在放置元素的過程中, 需要繼續維持底層數組的有序性質不變。
3、將新元素添加到底層數組里面。
4、改變程序將整數集合 encoding 屬性的值。
升級之后新元素的擺放位置
因為引發升級的新元素的長度總是比整數集合現有所有元素的長度都大, 所以這個新元素的值要么就大于所有現有元素, 要么就小于所有現有元素:
在新元素小于所有現有元素的情況下, 新元素會被放置在底層數組的最開頭(索引 0 );
在新元素大于所有現有元素的情況下, 新元素會被放置在底層數組的最末尾(索引 length-1 )。
整數集合的降級
整數集合不支持降級操作, 一旦對數組進行了升級, 編碼就會一直保持升級后的狀態。
對象
查看對象類型type
type test
| 類型常量 | 對象的名稱 | TYPE 命令的輸出 |
|---|---|---|
| REDIS_STRING | 字符串對象 | string |
| REDIS_LIST | 列表對象 | list |
| REDIS_HASH | 哈希對象 | hash |
| REDIS_SET | 集合對象 | set |
| REDIS_ZSET | 有序集合對象 | zset |
查看數據庫值對象 OBJECT ENCODING key
object encloding test
| 對象所使用的底層數據結構 | 編碼常量 | OBJECT ENCODING 命令輸出 |
|---|---|---|
| 整數 | REDIS_ENCODING_INT | "int" |
| embstr | 編碼的簡單動態字符串(SDS)REDIS_ENCODING_EMBSTR | "embstr" |
| 簡單動態字符串 | REDIS_ENCODING_RAW | "raw" |
| 字典 | REDIS_ENCODING_HT | "hashtable" |
| 雙端鏈表 | REDIS_ENCODING_LINKEDLIST | "linkedlist" |
| 壓縮列表 | REDIS_ENCODING_ZIPLIST | "ziplist" |
| 整數集合 | REDIS_ENCODING_INTSET | "intset" |
| 跳躍表和字典 | REDIS_ENCODING_SKIPLIST | "skiplist" |
字符串對象
embstr 編碼的字符串對象在執行命令時, 產生的效果和 raw 編碼的字符串對象執行命令時產生的效果是相同的, 但使用 embstr 編碼的字符串對象來保存短字符串值有以下好處:
embstr 編碼將創建字符串對象所需的內存分配次數從 raw 編碼的兩次降低為一次。
釋放 embstr 編碼的字符串對象只需要調用一次內存釋放函數, 而釋放 raw 編碼的字符串對象需要調用兩次內存釋放函數。
因為 embstr 編碼的字符串對象的所有數據都保存在一塊連續的內存里面, 所以這種編碼的字符串對象比起 raw 編碼的字符串對象能夠更好地利用緩存帶來的優勢。
embstr 編碼的字符串對象實際上是只讀的: 當我們對 embstr 編碼的字符串對象執行任何修改命令時, 程序會先將對象的編碼從 embstr 轉換成 raw , 然后再執行修改命令; 因為這個原因, embstr 編碼的字符串對象在執行修改命令之后, 總會變成一個 raw 編碼的字符串對象。
總結
- 上一篇: 自考新教材-p233
- 下一篇: 渲染农场