Redis 型別系統那些事

2021-10-25 19:00:35 字數 1394 閱讀 2746

參考:主要功能包括:

typedef struct redisobject  robj;
記錄了物件所儲存的值的型別

redis_string 0  // 字串

redis_list 1 // 列表

redis_set 2 // 集合

redis_zset 3 // 有序集合

redis_hash 4 // 雜湊表

記錄了物件所儲存的值的編碼

redis_encoding_raw 0            // 編碼為字串

redis_encoding_int 1 // 編碼為整數

redis_encoding_ht 2 // 編碼為雜湊表

redis_encoding_zipmap 3 // 編碼為 zipmap

redis_encoding_linkedlist 4 // 編碼為雙端鍊錶

redis_encoding_ziplist 5 // 編碼為壓縮列表

redis_encoding_intset 6 // 編碼為整數集合

redis_encoding_skiplist 7 // 編碼為跳躍表

指標,指向實際儲存值的資料結構。

見4當執行乙個處理資料型別的命令時, redis 執行以下步驟:

根據給定 key ,在資料庫字典中查詢和它相對應的 redisobject ,如果沒找到,就返回 null 。

檢查 redisobject 的 type 屬性和執行命令所需的型別是否相符,如果不相符,返回型別錯誤。

根據 redisobject 的 encoding 屬性所指定的編碼,選擇合適的操作函式來處理底層的資料結構。

返回資料結構的操作結果作為命令的返回值。

當伺服器考慮將乙個共享物件設定為鍵的值物件時, 程式需要先檢查給定的共享物件和鍵想建立的目標物件是否完全相同, 只有在共享物件和目標物件完全相同的情況下, 程式才會將共享物件用作鍵的值物件, 而乙個共享物件儲存的值越複雜, 驗證共享物件和目標物件是否相同所需的複雜度就會越高, 消耗的 cpu 時間也會越多:

因此, 儘管共享更複雜的物件可以節約更多的記憶體, 但受到 cpu 時間的限制, redis 只對包含整數值的字串物件進行共享。

引用計數技術來負責維持和銷毀物件, 它的運作機制如下:

關於系統安裝的那些事

安裝系統前先要確定硬碟的格式,屬於gpt還是mbr。如果是mbr採用傳統bios方式引導 legacy gpt使用uefu引導。如果安裝雙系統可以先檢視當前已有的系統 window,一般先裝window再去安裝其他系統 的引導方式,下面介紹一種方法。如果是傳統方式採用我之前的一些演算法來安裝雙系統,...

C 的那些事 資料與型別

最近在看c primer第5版,先前已經看過第4版,但是發現第5版在整個知識布局與個別知識的講解上跟第4版差別還是挺大的,尤其是新增了c 11的內容,正如孟巖老師在第5版前言中所講 現在能夠以新的c 11風格開發實踐的人是鳳毛麟角,如果能夠純熟的運用c 11的新特徵 新機制,那麼就能夠形成一種簡潔優...

那些人,那些事

很久沒有整理一下自己的思緒,聽著熟悉的歌,那歌聲會讓我想起那些人,那些事.乙個標點,乙個符號,乙個個早已在歲月深處冰封的眼神,一段沒有伴侶的歸途。一直以來我都認為我的人生就是這樣,平平淡淡,安安靜靜,波瀾不驚地在歲月的 眼角劃過,不留絲毫痕跡。現在看來,原來我寫的東西在很大程度上是是在滿足自己的某種...