redis的第四種資料結構——set
阿新 • • 發佈:2020-12-27
前面幾篇文章講了redis的string / hash / list,今天寫一下set。
redis的集合和數學上的集合是一樣的,set命令都以S開頭
1.新增元素到集合 sadd key member…
> sadd s1 1 2 3
(integer) 3
> sadd s1 3
(integer) 0
> sadd s1 2 3 4 5
(integer) 2
2.檢視集合中的元素 smembers key
> smembers s1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5"
3.檢視集合中元素個數 scard key
> scard s1
(integer) 5
4.元素是否在集合中 sismember key member
> sismember s1 9
(integer) 0
> sismember s1 1
(integer) 1
5.刪除集合中的元素 srem key member…
> srem s1 4 5
(integer) 2
> smembers s1
1) "1"
2) "2"
3) "3"
6.隨機挑幾個元素出來(集合內元素不變) srandmember key [count]
> srandmember s1
"2"
> srandmember s1 2
1) "3"
2) "1"
如果count超過了集合大小:
> srandmember s1 4
1) "1"
2) "2"
3) "3"
scard 操作,集合類元素不會發生改變
> scard s1
(integer) 3
7.隨機pop幾個元素出來(集合內元素髮生改變) spop key [count]
> spop s1 "2" > scard s1 (integer) 2 如果count超過了集合大小: > spop s1 6 1) "1" 2) "3" > scard s1 (integer) 0 集合中的元素被pop完時,key也被自動刪除 > keys * (empty array)
交集/並集/差集
資料準備
> flushall # 刪除所有key
OK
> sadd s1 1 2 3
(integer) 3
> sadd s2 2 3 4
(integer) 3
> sadd s3 2 5 6
(integer) 3
8.交集 sinter key1 key2 …
> sinter s1 s2
1) "2"
2) "3"
> sinter s1 s2 s3
1) "2"
9.差集 sdiff key1 key2 …
> sdiff s1 s2
1) "1"
10.並集 sunion key1 key2 …
> sunion s1 s2
1) "1"
2) "2"
3) "3"
4) "4"
11. store 操作
sunionstore destination key1 key2…
將集合運算的結果儲存到destination中,如果destination已經存在,則將其覆蓋。
> sunionstore s4 s1 s2 s3
(integer) 6
> smembers s4
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
此外還有:sdiffstore ,sinterstore 用法和上面一樣
12.移動元素 smove source destination member
將source中的member移動到destination中
如果source集合或member不存在,不執行任何操作,返回0
> smove s1 s2 1
(integer) 1
> smembers s1
1) "2"
2) "3"
> smembers s2
1) "1"
2) "2"
3) "3"
4) "4"