总结redis中对象的类型与编码
生活随笔
收集整理的這篇文章主要介紹了
总结redis中对象的类型与编码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 簡言
redis中使用對象來表示數據庫中的鍵和值
每當我們在redis的數據庫中新建立一個鍵值對時,redis會至少創建兩個對象,一個對象用作鍵,一個對象用作值,其中鍵的對象一定是字符串對象,值的對象是字符串,列表,哈希,集合,有序集合中的一種
2. 實現
redis中每個對象都由一個redisObject的結構表示
typedef struct redisObject {// 類型unsigned type:4;// 編碼unsigned encoding:4;// 指向底層實現數據結構的指針void* ptr;// ... } robj;3. type屬性
type屬性記錄了對象的類型,這個屬性的值對應如下表
| 類型常量 | 對象的名稱 | TYPE命令的返回值 |
| REDIS_STRING | 字符串對象 | string |
| REDIS_LIST | 列表對象 | list |
| REDIS_HASH | 哈希對象 | hash |
| REDIS_SET | 集合對象 | set |
| REDIS_ZSET | 有序集合對象 | zset |
備注:當我們對一個數據庫鍵執行TYPE命令時,會返回數據庫鍵對應的值對象的類型
例子:
redis> SET msg "hello world" OK redis> TYPE msg stringredis> HMSET profile name Tom age 25 career Programmer OK redis> TYPE profile hash4. encoding屬性
encoding屬性記錄了對象所使用的的編碼,也就是說這個對象使用了什么數據結構作為對象的底層實現
這個屬性的值對應如下表
| 編碼常量 | 編碼所對應的的底層數據結構 | OBJECT EN CODING 命令的返回 |
| REDIS_ENCODING_INT | long類型的整數 | int |
| REDIS_ENCODING_EMBSTR | 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 |
備注:當我們對一個數據庫鍵執行OBJECT ENCODING命令時,會返回數據庫鍵對應的值對象的類型
例子:
redis> SET msg "hello world" OK redis> OBJECT ENCODING msg embstrredis> SET story "long long long long long long long long long long long long long..." OK redis> OBJECT ENCODING story raw5. type屬性和encoding屬性的對應關系
| 類型(type屬性) | 編碼(encoding屬性) | 注釋 |
| REDIS_STRING | REDIS_ENCODING_INT | 整數值實現的字符串(是整數時則使用long表示) |
| REDIS_STRING | REDIS_ENCODING_EMBSTR | embstr編碼的簡單動態字符串實現的字符串(字符串長度小于等于32字節時) |
| REDIS_STRING | REDIS_ENCODING_RAW | 簡單動態字符串實現的字符串(字符串長度大于32字節時) |
| REDIS_LIST | REDIS_ENCODING_ZIPLIST | 壓縮列表實現的列表(每個元素大小小于64字節 且 元素數小于512個) |
| REDIS_LIST | REDIS_ENCODING_LINKEDLIST | 雙向鏈表實現的列表(某個元素大小大于64字節 或 元素數大于512個) |
| REDIS_HASH | REDIS_ENCODING_ZIPLIST | 壓縮列表實現的哈希表(每個元素大小小于64字節 且 元素數小于512個) |
| REDIS_HASH | REDIS_ENCODING_HT | 字典實現的哈希表(某個元素大小大于64字節 或 元素數大于512個) |
| REDIS_SET | REDIS_ENCODING_INTSET | 整數集合實現的集合(每個元素都是整數 且 元素數不超過512個) |
| REDIS_SET | REDIS_ENCODING_HT | 字典實現的集合(某個元素不是整數 或 元素數超過512個) |
| REDIS_ZSET | REDIS_ENCODING_ZIPLIST | 壓縮列表實現的有序集合(每個元素大小小于64字節 且 元素數小于128個) |
| REDIS_ZSET | REDIS_ENCODING_SKIPLIST | 使用跳躍表+字典實現的有序集合(某個元素大小大于64字節 或 元素數超過128個) |
?
總結
以上是生活随笔為你收集整理的总结redis中对象的类型与编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis 分布式锁的实现方式
- 下一篇: #pragma warning(pop)