redis數據結構及內部編碼

redis有5種經常使用的數據結構:string、hash、list、set、zset,經過type [key]命令能夠查看當前鍵的數據結構類型;每種數據結構都有不止一種相應的內部編碼實現,redis會在合適的場景選擇合適的內部編碼,經過object encoding [key] 能夠查看內部編碼。redis

這樣設計的好處:數據結構

1.改進內部編碼,對外的數據結構和命令沒有影響,外部用戶無感知。
2.多種內部編碼可在不一樣場景下發揮各自優點。如:ziplist比較節約內存,但在元素比較多的時候,性能會降低,此時轉換爲linkedlist。

每種數據結構以及內部編碼以下表所示:性能

圖片描述

string類型
是redis最基礎的數據結構,能夠是簡單的字符串,複雜的字符串(JSON、XML),數字,二進制(圖片、音頻、視頻),但最大值不能超過512M。編碼

hash類型
在數據量較小時使用ziplist,更加緊湊的存儲元素,節省內存;當不知足其使用條件時,會使用hashtable做爲hash的內部實現,此時ziplist的讀寫效率會降低,而hashtable的讀寫時間複雜度爲O(1)。spa

list類型
用來存儲多個有序的可重複的字符串,一個列表最多可有2^32-1個元素;能夠對列表兩端插入和彈出,還能夠取指定範圍的元素列表、獲取指定索引下標的元素等。列表是一種比較靈活的數據結構,能夠充當棧和隊列的角色。設計

set類型
集合中不容許有重複元素,而且集合中的元素是無序的。一個set集合最多可有2^32-1個元素,支持多個集合的交集、並集、差集。3d

zset類型
有序集合,不能有重複元素,但元素能夠排序,經過給每個元素設置一個分數做爲排序的依據。提供了獲取指定分數和元素範圍查詢、計算成員排名等功能。code

相關文章
相關標籤/搜索