Redis 物件的型別與編碼

2022-07-08 10:24:13 字數 2229 閱讀 5190

redis 使用物件來表示資料庫中的鍵和值, 每次當我們在 redis 的資料庫中新建立乙個鍵值對時, 我們至少會建立兩個物件, 乙個物件用作鍵值對的鍵(鍵物件), 另乙個物件用作鍵值對的值(值物件)。

舉個例子, 以下 set 命令在資料庫中建立了乙個新的鍵值對, 其中鍵值對的鍵是乙個包含了字串值"msg"的物件, 而鍵值對的值則是乙個包含了字串值"hello world"的物件:

redis> set msg "

hello world

"ok

redis 中的每個物件都由乙個redisobject結構表示, 該結構中和儲存資料有關的三個屬性分別是type屬性、encoding屬性和ptr屬性:

typedef struct

redisobject robj;

物件的type屬性記錄了物件的型別, 這個屬性的值可以是表 8-1 列出的常量的其中乙個。

對於 redis 資料庫儲存的鍵值對來說, 鍵總是乙個字串物件, 而值則可以是字串物件、列表物件、雜湊物件、集合物件或者有序集合物件的其中一種, 因此:

諸如此類。

type 命令的實現方式也與此類似, 當我們對乙個資料庫鍵執行 type 命令時, 命令返回的結果為資料庫鍵對應的值物件的型別, 而不是鍵物件的型別:

# 鍵為字串物件,值為字串物件

redis> set msg "

hello world"ok

redis>type msg

string

# 鍵為字串物件,值為列表物件

redis> rpush numbers 135

(integer)

6redis>type numbers

list

# 鍵為字串物件,值為雜湊物件

redis> hmset profile name tome age 25

career programmer

okredis>type profile

hash

# 鍵為字串物件,值為集合物件

(integer)

3redis>type fruits

set# 鍵為字串物件,值為有序集合物件

物件的ptr指標指向物件的底層實現資料結構, 而這些資料結構由物件的encoding屬性決定。

encoding屬性記錄了物件所使用的編碼, 也即是說這個物件使用了什麼資料結構作為物件的底層實現, 這個屬性的值可以是表 8-3 列出的常量的其中乙個。

使用 object encoding 命令可以檢視乙個資料庫鍵的值物件的編碼:

redis物件型別

redis物件型別 redis並沒有用我們先前提到的的主要資料結構 sds,鍊錶,字典,壓縮列表,跳躍列表作為redis物件的直接實現.而是基於這些資料 結構建立乙個物件系統.這個系統包括了字串物件,雜湊物件,列表物件,集合物件和有序集合物件.每種物件都至少用到了乙個我們前面介紹的資料結構.一.物件...

物件與型別

結構 struct 在記憶體中的儲存地點是 棧 stack 類 class 在記憶體中的儲存地點是 堆 heap 示例 struct retangle public double width public double height public retangle double width,doub...

Redis資料物件及底層編碼實現

最近在研究redis,稍微看了一下huanggz的 redis設計與實現 及原始碼中的相關實現,感覺作者對於redis確實有一定程式的了解,把問題說明很很清楚。本文算是對下午的學習的乙個記錄。作為記憶體資料庫,由於其採用的c語言沒有內建相關的資料結構,redis自己實現了幾個底層的資料結構,具體包括...