[Redis] Redis 資料結構 - SET
前言

昨日的文章討論到 Redis 儲存物件用的資料結構 - Hash,本篇接著探討 Redis 的另一個資料結構 - SET
什麼是 SET?
SET 是 Redis 裡 string 的集合,故有無序、唯一(不重複)等特點, Redis 有支援多個 Set 之間取交集,差集,聯集的操作
SADD && SMEMBERS
SADD 添加新的值至指定的 key set,SMEMBERS 查詢指定的 key set 裡所有的值
語法:
| 1 |  | 
範例:
| 1 |  | 
SISMEMBER
用於檢查某個值是否存在指定的 key set 裡。
回傳值為 1 表存在; 為 0 則表不存在
語法:
| 1 |  | 
範例:
沿用 SADD 範例資料
| 1 |  | 
SCARD
計算指定的 key set 裡的 element 數量,回傳值為計算後的結果
語法:
| 1 |  | 
範例:
沿用 SADD 範例資料
| 1 |  | 
SMOVE
將某個 key set 裡的元素移到另一個指定的 key set 裡,回傳值為 1 表該元素成功移至指定的 key set 裡,反之若回傳值為 0 則表示該元素不在來源 key set or 未執行
Note:
這是具有原子性(Atomic) 的操作
語法:
| 1 |  | 
- source:移出元素的來源 set key
- destination: 移入元素的目標 set key
- member:要搬動的元素
範例:
新增兩個 key set,分別是 sourcememeb, destinmemeb
| 1 |  | 
將 sourcememeb 裡的 “B” 元素移動至 destinmemeb 裡面
| 1 |  | 
SPOP
Ref: SPOP
從指定的 key set 隨機移除一個 or 多個元素
語法:
| 1 |  | 
- [count]: 指定移除的數量,屬於可選(Optional)參數
Note
除非有在SPOP指令後面加上參數指定數量,預設情況下會是移除一個元素
範例:
指定移除 popsets 裡的兩個元素
| 1 |  | 
SREM
用於移除一個 or 多個指定的元素,回傳值為移除的元素數量。若 key set 不存在 or key 裡的元素皆不存在,則回傳值為 0
語法:
| 1 |  | 
範例:
指定 “two” “three” 兩個元素於 popsets 裡移除 
| 1 |  | 
SDIFF && SDIFFSTORE
SDIFF 可取得多個 set 間的 差集,而 SDIFFSTORE 則是取得差集後存放至指定的新 key set。
語法:
| 1 |  | 
範例描述:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
取得 key1 key2 key3 三者的差集 {b,d}
範例1: SDIFF
回傳值為: 差集裡的所有 elements
| 1 |  | 
範例2: SDIFFSTORE
沿用 SDIFF 的範例資料,回傳值為:差集裡的 element 數量,並將回傳值放進新的 key set 裡面
| 1 |  | 
SINTER & SINTERSTORE
概念與 SDIFF && SDIFFSTORE 兩者類似。SINTER 可取得多個 set 間的 交集 ,而 SINTERSTORE 則是取得交集後存放至指定的新 key set。
語法:
| 1 |  | 
沿用 SDIFF && SDIFFSTORE 的範例資料:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
取得 key1 key2 key3 三者的差集 {c}
範例1: SINTER
| 1 |  | 
範例2: SDIFFSTORE
將回傳值放進新的 key set 裡面
| 1 |  | 
SUNION & SUNIONSTORE
SUNION: 取得所有集合裡的元素; SUNIONSTORE 將所有取得的元素放入新的 key set
語法:
| 1 |  | 
沿用 SDIFF && SDIFFSTORE 的範例資料:
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
取得所有 key1, key2, key3 集合: {a,b,c,d,e}
範例: SUNION
| 1 |  | 
範例: SUNIONSTORE
| 1 |  | 
總結
前述列出了多個常見 Redis SET 的指令,透過範例了解如何變動 SET 裡的資料,進階一點還可以對多個 SETS 之間取差集、聯集等。
下篇來討論一下與 SET 擁有相似特點,但又不同的 Sorted Sets 吧!