1. 程式人生 > 其它 >redis的第四種資料結構——set

redis的第四種資料結構——set

技術標籤:redisredis

前面幾篇文章講了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"