日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总结redis中对象的类型与编码

發布時間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总结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 hash

4. encoding屬性

encoding屬性記錄了對象所使用的的編碼,也就是說這個對象使用了什么數據結構作為對象的底層實現

這個屬性的值對應如下表

編碼常量編碼所對應的的底層數據結構OBJECT EN CODING 命令的返回
REDIS_ENCODING_INTlong類型的整數int
REDIS_ENCODING_EMBSTRembstr編碼的字符串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 raw

5. type屬性和encoding屬性的對應關系

類型(type屬性)編碼(encoding屬性)注釋
REDIS_STRINGREDIS_ENCODING_INT整數值實現的字符串(是整數時則使用long表示)
REDIS_STRINGREDIS_ENCODING_EMBSTRembstr編碼的簡單動態字符串實現的字符串(字符串長度小于等于32字節時)
REDIS_STRINGREDIS_ENCODING_RAW簡單動態字符串實現的字符串(字符串長度大于32字節時)
REDIS_LISTREDIS_ENCODING_ZIPLIST壓縮列表實現的列表(每個元素大小小于64字節 且 元素數小于512個)
REDIS_LISTREDIS_ENCODING_LINKEDLIST雙向鏈表實現的列表(某個元素大小大于64字節 或 元素數大于512個)
REDIS_HASHREDIS_ENCODING_ZIPLIST壓縮列表實現的哈希表(每個元素大小小于64字節 且 元素數小于512個)
REDIS_HASHREDIS_ENCODING_HT字典實現的哈希表(某個元素大小大于64字節 或 元素數大于512個)
REDIS_SETREDIS_ENCODING_INTSET整數集合實現的集合(每個元素都是整數 且 元素數不超過512個)
REDIS_SETREDIS_ENCODING_HT字典實現的集合(某個元素不是整數 或 元素數超過512個)
REDIS_ZSETREDIS_ENCODING_ZIPLIST壓縮列表實現的有序集合(每個元素大小小于64字節 且 元素數小于128個)
REDIS_ZSETREDIS_ENCODING_SKIPLIST使用跳躍表+字典實現的有序集合(某個元素大小大于64字節 或 元素數超過128個)

?

總結

以上是生活随笔為你收集整理的总结redis中对象的类型与编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。