根據 官網檔案 的解釋,可以瞭解 Redis 基礎資料型別的一些基本資訊:
對於 Redis 來說,儲存的 key 值都是字串型別,討論資料型別的時候,指的都是儲存的 value 值。這裡主要是包括 5 種資料型別:String、List、Set、Hash、SortedSet。
如果想要了解 Redis 基礎資料型別支援的命令,可以檢視 官方檔案,篩選對應資料型別即可。
String 是最基本的 Redis 資料型別,其是二進位制安全的,這表示 String 可以儲存任何型別的資料,如字串、數位、圖片、序列化物件等等。
官方檔案 提供了部分對 String 資料型別的說明,具體 String 資料型別支援的命令也可以通過存取 這裡 檢視。
有一點需要注意,String 資料型別最高支援儲存 512MB 長度的資料。
通常情況,String 資料型別會使用在以下場景:
INCRBY
這樣的增量命令實現原子計數器SET
命令實現分散式鎖Redis 的 List 資料型別是一個雙端連結串列,因此 List 隨機存取的效率比較低,不過可以像使用連結串列一樣實現鏈式棧、鏈式佇列等功能。
官方檔案 提供了部分對 List 資料型別的說明,具體 List 資料型別支援的命令也可以通過存取 這裡 檢視。
有一點需要注意,List 資料型別最大支援儲存 \(2^{32} - 1\)(約 42 億) 個元素。
通常情況,List 資料型別會使用在以下場景:
LPUSH
命令和 LPOP
命令即可實現棧LPUSH
命令和 RPOP
命令即可實現佇列LPUSH
命令和 LTRIM
命令即可實現有限集合LPUSH
命令和 BRPOP
命令即可實現延時訊息佇列Set 是一個無序不重複集合,並且現有命令實現集合的交集、並集、差集等功能,但頻繁使用這些功能會影響 Redis 伺服器的效能,建議謹慎使用。
官方檔案 提供了部分對 Set 資料型別的說明,具體 Set 資料型別支援的命令也可以通過存取 這裡 檢視。
同 List 資料型別一樣,Set 資料型別最大支援儲存 \(2^{32} - 1\)(約 42 億) 個元素。
通常情況,Set 資料型別會使用在以下場景:
Redis 的 Hash 資料型別儲存著字串 field 和字串 value 的對映關係,特別適合儲存 key-value 結構。
官方檔案 提供了部分對 Hash 資料型別的說明,具體 Hash 資料型別支援的命令也可以通過存取 這裡 檢視。
每個 Hash 資料型別最多可以儲存 \(2^{32} - 1\)(約 42 億) 個鍵值對,實際上,Hash 資料型別僅受 Redis 所部署的記憶體限制。
通常情況,Hash 資料型別會使用在以下場景:
SortedSet 資料型別有點類似於 Set 資料型別,不同之處在於 SortedSet 資料型別支援按照給定的分數對資料進行排序。
SortedSet 中的集合通過雜湊表實現,在實際使用中,新增、刪除、查詢的效率都非常高。
官方檔案 提供了部分對 Hash 資料型別的說明,具體 Hash 資料型別支援的命令也可以通過存取 這裡 檢視。
大多數 SortedSet 操作的複雜度是 O(log(N)),其中 N 是成員數。部分批次查詢命令的時間複雜度可以達到 O(log(N) + M),這裡的 M 是返回的結果數。
通常情況,SortedSet 資料型別會使用在以下場景:
Redis 中最常見的資料型別就是 String、List、Set、Hash、SortedSet 這 5 種,也是最初支援的資料型別。
當然,Redis 也有一些不常見、卻適用於特殊場景的資料型別,瞭解這些資料型別也是很必要的。
Stream 是 Redis 5.0 版本新增的資料型別,其本身類似於 append-only 紀錄檔。實際上給 Redis 的釋出、訂閱功能提供了持久化和主備複製功能,可以讓任何使用者端存取任何時刻的資料,並且能記住每一個使用者端的存取位置,還能保證訊息不丟失。
Geospatial 是 Redis 3.2 版本新增的資料型別,此型別主要用於儲存地理位置資訊,並且 Redis 提供了常見的地理位置查詢命令。
HyperLogLog 是 Redis 2.8.9 版本新增的資料型別,主要用於做基數統計的演演算法。其使用不超過 12 KB 的儲存,且僅達到 0.81% 的標準錯誤率,應用場景也是十分特殊。
Bitmap 是 String 資料型別的擴充套件,是定義在 String 資料型別上的面向位的操作,其最大的優點是當儲存資訊時可以節省極大的空間。