Redis從入門到放棄(2):資料型別

2023-07-27 18:00:47

在Redis中,資料以鍵值對的形式儲存。Redis支援五種主要的資料型別,每種型別都有不同的用途和特性。

本文將介紹Redis的五種資料型別:字串(string),雜湊(hash),列表(list),集合(set)和有序集合(sorted set)。

1. 字串(String)

介紹

字串是Redis中最基本的資料型別。每個鍵都可以關聯一個字串值,這個值可以是任何型別的資料,如文字、數位或序列化的物件。字串型別支援一系列的操作,包括設定值、獲取值、修改值以及對值進行計數和排序等。

命令範例

# 設定鍵的值
SET mykey "Hello Redis"

# 獲取鍵的值
GET mykey

# 修改鍵的值
SET mykey "Updated value"

# 對值進行遞增
INCR counter

# 對值進行排序
SORT mylist

注意事項

  • 字串型別的值最大可以儲存512MB的資料。
  • INCR 命令作用於非整型時會報錯:(error) ERR value is not an integer or out of range

2. 雜湊(Hash)

介紹

雜湊型別在Redis中用於儲存物件。一個雜湊型別的鍵關聯了一個鍵值對集合,其中每個鍵值對都是一個欄位和值的組合。雜湊型別適合儲存結構化的資料,如使用者資訊、文章內容等。類似於Java的Map。

命令範例

# 設定雜湊鍵中的欄位值
HSET user:1 name "John"
HSET user:1 age 30

# 獲取雜湊鍵中的欄位值
HGET user:1 name

# 刪除雜湊鍵中的欄位及其值
HDEL user:1 age

# 獲取雜湊鍵中所有的欄位和值
HGETALL user:1

注意事項

  • HSET 命令不區分插入和更新操作,這意味著修改資料時不用事先判斷欄位是否存在來決定要執行的是插入還是更新操作。

3. 列表(List)

介紹

列表型別是一個有序的字串集合。列表中的每個元素都有一個索引,可以根據索引進行存取和操作。列表型別支援在頭部和尾部進行元素的插入和刪除操作,可以實現佇列、棧等資料結構。

命令範例

# 將值插入列表的頭部
LPUSH mylist "one"
LPUSH mylist "two"

# 將值插入列表的尾部
RPUSH mylist "three"
RPUSH mylist "four"

# 從列表的頭部彈出一個值
LPOP mylist

# 從列表的尾部彈出一個值
RPOP mylist

# 獲取列表中指定範圍內的元素
LRANGE mylist 0 -1

注意事項

  • 列表型別的元素可以重複。
  • 列表型別支援按索引進行快速存取和操作。
  • 列表最多可儲存 232 - 1 元素 (4294967295, 每個列表可儲存40多億)。

4. 集合(Set)

介紹

集合型別是一個無序、唯一的字串集合。集合中的元素沒有重複,可以進行交集、並集、差集等集合運算。集合型別適合儲存不重複的元素,如標籤、使用者的興趣愛好等。

命令範例

# 向集合新增一個成員
SADD tags "redis"
SADD tags "database"

# 從集合中移除一個成員
SREM tags "database"

# 獲取集合中的所有成員
SMEMBERS tags

# 獲取多個集合的交集
SINTER set1 set2

注意事項

  • 集合型別的元素是無序的,不支援按索引存取。
  • 集合型別是通過雜湊表實現的,操作具有高效的效能,可以快速執行集合運算。

5. 有序集合(Sorted Set)

介紹

有序集合型別是一個有序的字串集合,每個元素都與一個分數相關聯。有序集合中的元素按照分數進行排序,並且每個元素都是唯一的。有序集合型別適合儲存排行榜、排序結果等需要按照順序存取的資料。

命令範例

# 向有序集合新增一個成員,並指定其分數
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"

# 從有序集合中移除一個成員
ZREM leaderboard "player2"

# 獲取有序集合中指定範圍內的成員
ZRANGE leaderboard 0 -1

# 獲取有序集合中指定成員的分數
ZSCORE leaderboard "player1"

注意事項

  • 有序集合型別的元素按照分數進行排序,可以根據分數範圍快速獲取成員。
  • 有序集合型別的操作具有高效的效能,可以快速執行排序和排名相關的操作。

6、總結

以表格方式總結:

型別 簡介 特性 場景
String(字串) 二進位制安全 可以包含任何資料,比如jpg圖片或者序列化的物件,一個鍵最大能儲存512M ---
Hash(字典) 鍵值對集合,即程式語言中的Map型別 適合儲存物件,並且可以像資料庫中update一個屬性一樣只修改某一項屬性值(Memcached中需要取出整個字串反序列化成物件修改完再序列化存回去) 儲存、讀取、修改使用者屬性
List(列表) 連結串列(雙向連結串列) 增刪快,提供了操作某一段元素的API 1,最新訊息排行等功能(比如朋友圈的時間線) 2,訊息佇列
Set(集合) 雜湊表實現,元素不重複 1、新增、刪除,查詢的複雜度都是O(1) 2、為集合提供了求交集、並集、差集等操作 1、共同好友 2、利用唯一性,統計存取網站的所有獨立ip 3、好友推薦時,根據tag求交集,大於某個閾值就可以推薦
Sorted Set(有序集合) 將Set中的元素增加一個權重引數score,元素按score有序排列 資料插入集合時,已經進行天然排序 1、排行榜 2、帶權重的訊息佇列