1. 程式人生 > >Redis 筆記(五)set無序集合

Redis 筆記(五)set無序集合

1. 介紹

•一個集合型別可以儲存最多2^32 -1 個字串 •集合型別在redis內部使用值為空的散列表(hash table)實現,所以集合中的加入或刪除元素等時間複雜度為O(1)。 •集合具有元素唯一性。

set集合命令

SADD •新增一個或多個指定的member元素到集合的 key中.指定的一個或者多個元素member 如果已經在集合key中存在則忽略.如果集合key 不存在,則新建集合key,並新增member元素到集合key中. •如果key 的型別不是集合則返回錯誤.

SADD key member [member ...] 1
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1 127.0.0.1:6379> SADD myset1 "hello" (integer) 0 //新增失敗 127.0.0.1:6379> SADD myset1 "hello" "world" (integer) 1 //只新增成功一個

SMEMBERS •返回key集合所有的元素。該命令的作用與使用一個引數的SINTER 命令作用相同。

 SMEMBERS key 
127.0.0.1:6379> SMEMBERS myset1
1) "world"
2) "hello"
127.0.0.1:6379> SMEMBERS myset2
(empty list or set)

•SISMEMBER •返回成員 member 是否是儲存的集合 key的成員.

SISMEMBER key member 1
127.0.0.1:6379> SISMEMBER myset hello
(integer) 0         //不存在集合
127.0.0.1:6379> SISMEMBER myset1 hellos
(integer) 0         //不存在成員
127.0.0.1:6379> SISMEMBER myset1 hello
(integer) 1

SREM •在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素則忽略 如果key集合不存在則被視為一個空的集合,該命令返回0。如果key的型別不是一個集合,則返回錯誤.

 SREM key member [member ...] 1
127.0.0.1:6379> SREM myset1 hello world
(integer) 2
127.0.0.1:6379> SMEMBERS myset1
(empty list or set)

SPOP

•隨機刪除並返回集合中的若干元素

SPOP key [count] 1

127.0.0.1:6379> SADD myset1 a b c d e f g h 
(integer) 8
127.0.0.1:6379> SPOP myset1 4
1) "e"
2) "c"
3) "d"
4) "f"
127.0.0.1:6379> SMEMBERS myset1
1) "h"
2) "g"
3) "b"
4) "a"

SRANDMEMBER 隨機返回key集合中的若干元素。 接受 count 引數,如果count是整數且小於元素的個數,返回含有 count 個不同的元素的陣列,如果count是個整數且大於集合中元素的個數時,僅返回整個集合的所有元素,當count是負數,則會返回一個包含count的絕對值的個數元素的陣列,如果count的絕對值大於元素的個數,則返回的結果集裡會出現一個元素出現多次的情況。 提供key引數時,該命令作用類似於SPOP命令, 不同的是SPOP命令會將被選擇的隨機元素從集合中移除, 而SRANDMEMBER僅僅是返回該隨記元素,而不做任何操作。

SRANDMEMBER key [count]

127.0.0.1:6379> SRANDMEMBER myset1 
"d"
127.0.0.1:6379> SRANDMEMBER myset1 4
1) "c"
2) "h"
3) "b"
4) "a"
127.0.0.1:6379> SRANDMEMBER myset1 -4
1) "f"
2) "a"
3) "h"
4) "h"
//count 為負數時可能出現重複的成員

SDIFF •返回一個集合與給定集合的差集的元素.

SDIFF key [key ...]1
127.0.0.1:6379> SADD myset1 a b c d e
(integer) 5
127.0.0.1:6379> SADD myset2 c b e f g
(integer) 5
127.0.0.1:6379> SADD myset3 h i a b
(integer) 4
127.0.0.1:6379> SDIFF myset1 myset2
1) "d"          //在myset1中而不在myset2中的成員
2) "a"
127.0.0.1:6379> SDIFF myset2 myset1
1) "g"          //在myset2中而不在myset1中的成員
2) "f"
127.0.0.1:6379> SDIFF myset2 myset1 myset3
1) "g"          //在myset2中而不在myset1和myset3中的成員
2) "f"

SINTER •返回指定所有的集合的成員的交集。

SINTER key [key ...] 
127.0.0.1:6379> SINTER myset1 myset2 
1) "e"
2) "c"
3) "b"
127.0.0.1:6379> SINTER myset1 myset2 myset3
1) "b"

-SUNION

  • 返回給定的多個集合的並集中的所有成員.
SUNION key [key ...] 
127.0.0.1:6379> SUNION myset1 myset2 myset3
1) "c"
2) "g"
3) "b"
4) "f"
5) "a"
6) "i"
7) "e"
8) "d"
9) "h"

SCARD •返回集合儲存的key的基數 (集合元素的數量).

SCARD key 1
127.0.0.1:6379> SCARD myset1
(integer) 5
127.0.0.1:6379> SCARD myset2
(integer) 5
127.0.0.1:6379> SCARD myset3
(integer) 4

SDIFFSTORE •該命令類似於 SDIFF, 不同之處在於該命令不返回結果集,而是將結果存放在destination集合中. •如果destination已經存在, 則將其覆蓋重寫.

SDIFFSTORE destination key [key ...] 
127.0.0.1:6379> SDIFFSTORE diffSet myset1 myset2
(integer) 2
127.0.0.1:6379> SMEMBERS diffSet
1) "d"
2) "a"
127.0.0.1:6379> SDIFFSTORE diffSet myset1 myset2 myset3
(integer) 1
127.0.0.1:6379> SMEMBERS diffSet
1) "d"          //diffSet被覆蓋

其他的參考redis官方命令文件。