Redis 入門(二):五大類型 4:集合類型

介紹

  • 集合類型的經常使用操做是向集合中加入或刪除元素、判斷某個元素是否存在等,因爲集合類型在 Redis 內部是使用值爲空的散列表實現的,因此這些操做的時間複雜度都是O(1)。

命令

1.增長/刪除元素redis

SADD key member [member]
SREM key member [member]

SADD 命令用來向集合中增長一個或多個元素,若是鍵不存在則會自動建立。由於在一個集合中不能有相同的元素,因此若是要加入的元素已經存在於集合中就會忽略這個元素。本命令的返回值是成功加入的元素數量。code

redis> SADD letters a
(integer) 1
redis> SADD letters a b c
(integer) 2

第二條SADD命令的返回值爲2是由於元素「a」已經存在,因此實際上只加入了兩個元素。
SREM 命令用來從集合中刪除一個或多個元素,並返回刪除成功的個數。io

redis> SREM letters c d 
(integer) 1

因爲元素「d」在集合中不存在,因此只刪除了一個元素,返回值爲 1。入門

2.得到集合中的全部元素ember

SMEMBERS key

SMEMBERS 命令會返回集合中的全部元素。集合

redis> SMEMBERS letters
1) "b"
2) "a"

3.判斷元素是否在集合中di

SISMEMBER key member

當值存在時返回1,不存在時返回0。時間

redis> SISMEMBERS letters a
(integer) 1
redis> SISMEMBERS letters d
(integer) 0

4.集合間運算ant

SDIFF key [key ...]
SINTER key [key ...]
SUNION key [key ...]

SDIFF 命令用來對多個集合執行差集運算。co

redis> SADD setA 1 2 3
(integer) 3
redis> SADD setB 2 3 4
(integer) 3
redis> SDIFF setA setB
1) "1"
redis> SDIFF setB setA
1) "4"

SDIFF 命令支持同時傳入多個鍵

redis> SADD setC 2 3 
(integer) 2
redis> SDIFF setA setB setC
1) "1"

計算順序爲:setA - setB 以後的結果 - setC

SINTER 命令用來對多個集合執行交集運算。

redis> SINTER setA setB
1) "2"
2) "3"

SINTER 命令一樣支持同時傳入多個鍵。

redis> SINTER setA setB setC
1) "2"
2) "3"

SUNION 命令用來對多個集合執行並集運算。

redis> SUNION setA setB
1) "1"
2) "2"
3) "3"
4) "4"

SUNION 命令一樣支持多個鍵,這裏就不贅述了。
5.得到集合中元素個數

SCARD key

例如:

redis> SMEMBERS letters
1) "b"
2) "a"
redis> SCARD letters
(integer) 2

6.進行集合運算並將結果存儲

SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]

SDIFFSTORE 命令與 SDIFF命令功能同樣,惟一的區別就是前者不會直接返回運算結果,而是將結果存儲在 destiantion 鍵中。
SDIFFSTORE 命令經常使用於須要進行多步集合運算的場景中,如須要先計算差集再將結果和其餘鍵計算交集。
SINTERSTORE 和 SUNIONSTORE 命令與之相似,再也不贅述。
7.隨機得到集合中的元素
SRANDMEMBER key [count]
SRANDMEMBER 命令用來隨機從集合中獲取一個元素。

redis> SRANDMEMBER letters
"a"
redis> SRANDMEMBER letters
"b"
redis> SRANDMEMBER letters
"a"

還能夠傳遞count參數來一次隨機得到多個元素,根據count的正負不一樣,具體表現也不一樣。
(1)當count爲正數時,SRANDMEMBER 會隨機從集合裏得到 count 個不重複的元素。若是 count 的值大於集合中的元素個數,則 SRANDMEMBER 會返回集合中的所有元素。
(2)當count爲負數時,SRANDMEMBER 會隨機從集合裏得到|count|個的元素,這些元素都有可能相同。

redis> SADD letters c d
(integer) 2

目前letters集合中有 「a」,「b」,「c」,「d」。

redis> SRANDMEMBER letters 2
1) "a"
2) "c"
redis> SRANDMEMBER letters 2
1) "a"
2) "b"
redis> SRANDMEMBER letters 100
1) "b"
2) "a"
3) "c"
4) "d"
redis> SRANDMEMBER letters -2
1) "b"
2) "b"
redis> SRANDMEMBER letters -10
1) "b"    
2) "b"    
3) "a"    
4) "c"    
5) "b"    
6) "a"    
7) "b"    
8) "d"    
9) "b"    
10) "b"

8.從集合中彈出一個元素

SPOP key

由於集合是無序的,因此彈出元素也是隨機的。

redis> SPOP letters
"b"
redis> SMEMBERS letters
1) "a"
2) "c"
3) "d"

整理自《Redis 入門指南第二版》。

相關文章
相關標籤/搜索