Redis 5種資料結構

2021-09-12 06:17:07 字數 1585 閱讀 8804

在正式介紹5種資料結構之前,我們先了解下redis的一些全域性命令、資料結構和內部編碼、單執行緒命令處理機制。

1.全域性命令

·檢視所有鍵 keys *(keys命令會遍歷所有鍵,所以它的複雜度是o(n),當redis儲存大量資料時,線上環境禁止使用)

·當前資料庫中鍵的總數 dbsize

·檢查鍵是否存在 exists key 存在返回1,不存在返回0。

·刪除key del key [key ...] 返回結果為成功刪除鍵的個數,刪除不存在的key,返回0。

·鍵過期 expire key seconds

·檢視鍵剩餘的過期時間 ttl key 返回值大於等於0,為剩餘的過期時間。-1為鍵沒有設定過期時間。-2為鍵不存在。

·檢視鍵的資料結構 type key 返回結果:string、list、... 、none。

2.資料結構和內部編碼

type命令返回的就是當前鍵的資料結果型別,分別為string(字串)、hash(雜湊)、list(列表)、set(集合)、zset(有序

集合),但這些只是對外的資料結構,如下圖所示。

實際上每種資料結構都有多種自己的底層內部編碼實現,這樣redis會在合適的場景選擇合適的內部編碼,如下:

·string int、raw、embstr

·hash ziplist、hashtable

·list ziplist、linkedlist

·set intset、hashtable

·zset ziplist、skiplist

可以看到每種資料結構都有兩種以上的內部編碼實現,可以通過object encoding命令查詢內部編碼。

redis這樣的設計的好處:

·改進內部編碼,對外部的資料結構和命令沒有影響,這樣一旦開發出更優秀的內部編碼,無需改動外部資料結構和命令,例如

3.2.0版本提供了quicklist,結合了ziplist和linkedlist兩者的優勢,為list型別提供了一種更為優秀的內部編碼

實現,但對外部使用者來說基本感覺不到。

·多種內部編碼實現可以在不同場景下發揮各自的優勢,例如ziplist比較節省記憶體,但是在list元素比較多的情況下,效能會有所

下降,這時候redis就會將list元素的內部編碼改為linkedlist。

3.單執行緒架構

redis使用了單執行緒架構和i/o多路復用模型來實現高效能的記憶體資料庫服務。

通常來講,單執行緒的處理能力要比多執行緒的差,但redis使用單執行緒卻可以達到每秒萬級別的處理能力,將其歸納以下幾點:

·存記憶體訪問,redis將所有資料放在記憶體中,記憶體的響應時長大約是100納秒。

·非阻塞i/o,redis使用epoll作為i/o多路復用技術的實現,再加上redis自身的事件處理模型將epoll中的連線、讀寫、關閉都轉換

為事件,不在網路i/o上浪費過多的時間。

`單執行緒模式避免了執行緒切換和資源競爭產生的消耗。

Redis 5種資料結構

redis支援五種資料型別 1 string 字串 string型別是redis最基本的資料型別,乙個key對應乙個value。string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg或者序列化的物件 2 hash 雜湊 redis hash 是乙個鍵值對集合。r...

REDIS 5種資料結構

redis是由c語言編寫的,但是redis的字串並不是c語言原生的字串,而是叫sds的結構體,包含 free 空閒的位元組數 len 已經使用的位元組數 char buf 字元 位元組 陣列 使用sds的好處是 獲取字串長度的複雜度為o 1 因為c語言原生的字串是不記錄長度的,sds的len就是長度...

redis5種資料結構講解及使用場景

redis提供了5中資料結構,理解每種資料結構的特點對於redis開發運維非常重要。在redis中雜湊型別是指鍵本身又是一種鍵值對結構,如 value fieldn,valuen 列表型別是用來儲存多個有序的字串,列表中的每個字串成為元素 element 乙個列表最多可以儲存2的32次方 1個元素,...