文章目錄
- 基本概念
- SADD 和 SMEMBERS
- SCARD
- SPOP
- SRANDMEMBER
- SMOVE
- SREM
- 集合間操作
- SINTER
- SINTERSTORE
- SUNION
- SUNIONSTORE
- SDIFF
- SDIFFSTORE
- 命令小結
- 內部編碼
基本概念
談到一個屬于,這個術語可能有多種含義,set
- 集合
- 設置(和
get
相對應)
集合就是把一些有關聯的數據放到一起
-
集合中的元素是無序的(和前面
list
的有序是對應的)- 有序:順序很重要,變化一下順序,就是不同的
list
了 - 無序:順序不重要,變化一下順序,集合還是那個集合
- 有序:順序很重要,變化一下順序,就是不同的
-
集合中的元素是不能重復的(唯一的)
和 list
類似,集合中的每個元素,也都是 string
類型(可以使用 JSON
這樣的格式讓 string
也能存儲結構化數據)
SADD 和 SMEMBERS
- 將一個或者多個元素添加到
set
中,重復的元素無法添加到set
中 - 獲取一個
set
中的所有元素,元素之間的順序是無序的!!!
語法:
SADD key member [member ...]SMEMBERS key
SADD
返回值:所有元素的列表MEMBERS
返回值:1 表示元素在set
中。0 比哦啊是元素不在set
中或者key
不存在
SCARD
獲取一個 set
的基數(cardinality
),即 set
中的元素個數
語法:
SCARD key
- 返回值:
set
中元素的個數
SPOP
從 set
中刪除并返回一個或者多個元素。注意,由于 set
內的元素是無序的,所以取出哪個元素實際是未定義行為,即可以看做隨機的
語法:
SPOP key [count]
- 返回值:取出的元素
在
Redis
源碼中,針對spop
實現的時候,就采取了“生成隨機數”的方式
SRANDMEMBER
隨機返回元素, 一個或多個
語法:
SRANDMEMBER key
- 返回隨機到的元素
SMOVE
將元素從源 set
取出并放入目標 set
中
語法:
SMOVE source destination member
- 1 表示移動成功,0 表示失敗
SREM
將制定的元素從 set
中刪除
語法:
SREM key member [member ...]
- 返回值:本次操作刪除的元素個數
集合間操作
交集(inter
)、并集(union
)、差集(diff
)
- 交集:最終結果同時出現在兩個集合中
- 并集:把多個集合中的數據都集中放在一起,如果有元素重復,也最終只保留一份
A
和B
做差集,就是找出哪些元素,在A
中存在,同時再B
中不存在
SINTER
獲取給定 set
的交集中的元素
語法:
SINTER key [key ...]
- 返回值:交集的元素
SINTERSTORE
獲取給定 set
的交集中的元素并保存到目標 set
中
語法:
SINTERSTORE destination key [key ...]
- 返回值:交集的元素個數
SUNION
獲取給定 set
的并集中的元素
語法:
SUNION key [key ...]
- 返回值:并集的元素
SUNIONSTORE
獲取給定 set
的并集中的元素并保存到目標 set
中
語法:
SUNIONSTORE destination key [key ...]
- 返回值:并集的元素個數
SDIFF
獲取給定 set
的差集中的元素
語法:
SDIFF key [key ...]
- 返回值:差集的元素
SDIFFSTORE
獲取給定 set
的差集中的元素并保存到目標 set
中
語法:
SDIFFSTORE destination key [key ...]
- 返回值:差集的元素個數
命令小結
內部編碼
intset
(整數集合)
-
為了節省空間,做出的特定優化。當元素均為整數,并且元素個數不是很多的時候
-
hashtable
(哈希表)