Redis命令參考手冊——Set(集合)

Redis命令參考手冊——Set(集合)

1、SADD

格式:sadd key member [member …]
將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。 假如 key 不存在,則創建一個只包含 member 元素作成員的集合。 當 key 不是集合類型時,返回一個錯誤。 注:在 Redis2.4 版本以前, SADD 只接受單個 member 值。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 是被添加的元素的數量。
返回值:
被添加到集合中的新元素的數量,不包括被忽略的元素。
示例代碼

# 添加單個元素
redis> SADD bbs "discuz.net"
(integer) 1
# 添加重複元素
redis> SADD bbs "discuz.net"
(integer) 0
# 添加多個元素
redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2
redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"

2、SREM

格式:srem key member [member …]
移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。 當 key 不是集合類型,返回一個錯誤。 注:在 Redis 2.4 版本以前, SREM 只接受單個 member 值。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 爲給定 member 元素的數量。
返回值:
被成功移除的元素的數量,不包括被忽略的元素。
示例代碼

# 測試數據
redis> SMEMBERS languages
1) "c"
2) "lisp"
3) "python"
4) "ruby"
# 移除單個元素
redis> SREM languages ruby
(integer) 1
# 移除不存在元素
redis> SREM languages non-exists-language
(integer) 0
# 移除多個元素
redis> SREM languages lisp python c
(integer) 3
redis> SMEMBERS languages
(empty list or set)

3、SMEMBERS

格式:smembers key
返回集合 key 中的所有成員。 不存在的 key 被視爲空集合。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 爲集合的基數。
返回值:
集合中的所有成員。
示例代碼

# key 不存在或集合爲空
redis> EXISTS not_exists_key
(integer) 0
redis> SMEMBERS not_exists_key
(empty list or set)
# 非空集合
redis> SADD language Ruby Python Clojure
(integer) 3
redis> SMEMBERS language
1) "Python"
2) "Ruby"
3) "Clojure"

4、SISMEMBER

格式:sismembers key member
判斷 member 元素是否集合 key 的成員。
可用版本:

>=1.0.0

時間複雜度:
O(1)
返回值:
如果 member 元素是集合的成員,返回 1 。 如果 member 元素不是集合的成員,或 key 不存在,返回 0 。
示例代碼

redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SISMEMBER joe's_movies "bet man"
(integer) 0
redis> SISMEMBER joe's_movies "Fast Five"
(integer) 1

5、SCARD

格式:scard key
返回集合 key 的基數(集合中元素的數量)。
可用版本:

>=1.0.0

時間複雜度:
O(1)
返回值:
集合的基數。 當 key 不存在時,返回 0 。
示例代碼

redis> SADD tool pc printer phone
(integer) 3
redis> SCARD tool # 非空集合
(integer) 3
redis> DEL tool
(integer) 1
redis> SCARD tool # 空集合
(integer) 0

6、SMOVE

格式:smove source destination member
將 member 元素從 source 集合移動到 destination 集合。 SMOVE 是原子性操作。 如果 source 集合不存在或不包含指定的 member 元素,則 SMOVE 命令不執行任何操作,僅返回 0 。否則, member 元素從 source 集合中被移除,並添加到 destination 集合中去。 當 destination 集合已經包含 member 元素時,SMOVE 命令只是簡單地將 source 集合中的 member 元素刪除。 當 source 或 destination 不是集合類型時,返回一個錯誤。
可用版本:

>=1.0.0

時間複雜度:
O(1)
返回值:
如果 member 元素被成功移除,返回 1 。 如果 member 元素不是 source 集合的成員,並且沒有任何操作對 destination 集合執行,那麼返回 0 。
示例代碼

redis> SMEMBERS songs
1) "Billie Jean"
2) "Believe Me"
redis> SMEMBERS my_songs
(empty list or set)
redis> SMOVE songs my_songs "Believe Me"
(integer) 1
redis> SMEMBERS songs
1) "Billie Jean"
redis> SMEMBERS my_songs
1) "Believe Me"

7、SPOP

格式:spop key
移除並返回集合中的一個隨機元素。 如果只想獲取一個隨機元素,但不想該元素從集合中被移除的話,可以使用SRANDMEMBER 命令。
可用版本:

>=1.0.0

時間複雜度:
O(1)
返回值:
被移除的隨機元素。 當 key 不存在或 key 是空集時,返回 nil 。
示例代碼

redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
3) "Redis"
redis> SPOP db
"Redis"
redis> SMEMBERS db
1) "MySQL"
2) "MongoDB"
redis> SPOP db
"MySQL"
redis> SMEMBERS db
1) "MongoDB"

8、SRANDMEMBER

格式:srandmember key [count]
如果命令執行時,只提供了 key 參數,那麼返回集合中的一個隨機元素。 從 Redis 2.6 版本開始, SRANDMEMBER 命令接受可選的 count 參數: 1.如果 count 爲正數,且小於集合基數,那麼命令返回一個包含 count 個元素的數組,數組中的元素各不相同。如果 count 大於等於集合基數,那麼返回整個集合。 2.如果 count 爲負數,那麼命令返回一個數組,數組中的元素可能會重複出現多次,而數組的長度爲 count 的絕對值。 該操作和 SPOP 相似,但 SPOP 將隨機元素從集合中移除並返回,而 SRANDMEMBER 則僅僅返回隨機元素,而不對集合進行任何改動。
可用版本:

>=1.0.0

時間複雜度:
只提供 key 參數時爲 O(1) 。 如果提供了 count 參數,那麼爲 O(N) ,N 爲返回數組的元素個數。
返回值:
只提供 key 參數時,返回一個元素;如果集合爲空,返回 nil 。 如果提供了 count 參數,那麼返回一個數組;如果集合爲空,返回空數組。
示例代碼

# 添加元素
redis> SADD fruit apple banana cherry
(integer) 3
# 只給定 key 參數,返回一個隨機元素
redis> SRANDMEMBER fruit
"cherry"
redis> SRANDMEMBER fruit
"apple"
# 給定 3 爲 count 參數,返回 3 個隨機元素
# 每個隨機元素都不相同
redis> SRANDMEMBER fruit 3
1) "apple"
2) "banana"
3) "cherry"
# 給定 -3 爲 count 參數,返回 3 個隨機元素
# 元素可能會重複出現多次
redis> SRANDMEMBER fruit -3
1) "banana"
2) "cherry"
3) "apple"
redis> SRANDMEMBER fruit -3
1) "apple"
2) "apple"
3) "cherry"
# 如果 count 是整數,且大於等於集合基數,那麼返回整個集合
redis> SRANDMEMBER fruit 10
1) "apple"
2) "banana"
3) "cherry"
# 如果 count 是負數,且 count 的絕對值大於集合的基數
# 那麼返回的數組的長度爲 count 的絕對值
redis> SRANDMEMBER fruit -10
1) "banana"
2) "apple"
3) "banana"
4) "cherry"
5) "apple"
6) "apple"
7) "cherry"
8) "apple"
9) "apple"
10) "banana"
# SRANDMEMBER 並不會修改集合內容
redis> SMEMBERS fruit
1) "apple"
2) "cherry"
3) "banana"
# 集合爲空時返回 nil 或者空數組
redis> SRANDMEMBER not-exists
(nil)
redis> SRANDMEMBER not-eixsts 10
(empty list or set)

9、SINTER

格式:sinter key [key …]
返回一個集合的全部成員,該集合是所有給定集合的交集。 不存在的 key 被視爲空集。 當給定集合當中有一個空集時,結果也爲空集(根據集合運算定律)。
可用版本:

>=1.0.0

時間複雜度:
O(N * M), N 爲給定集合當中基數最小的集合, M 爲給定集合的個數。
返回值:
交集成員的列表。
示例代碼

redis> SMEMBERS group_1
1) "LI LEI"
2) "TOM"
3) "JACK"
redis> SMEMBERS group_2
1) "HAN MEIMEI"
2) "JACK"
redis> SINTER group_1 group_2
1) "JACK"

10、SINTERSTORE

格式:sinterstore destination key [key …]
這個命令類似於 SINTER 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集。 如果 destination 集合已經存在,則將其覆蓋。 destination 可以是 key 本身。
可用版本:

>=1.0.0

時間複雜度:
O(N * M), N 爲給定集合當中基數最小的集合, M 爲給定集合的個數。
返回值:
結果集中的成員數量。
示例代碼

redis> SMEMBERS songs
1) "good bye joe"
2) "hello,peter"
redis> SMEMBERS my_songs
1) "good bye joe"
2) "falling"
redis> SINTERSTORE song_interset songs my_songs
(integer) 1
redis> SMEMBERS song_interset
1) "good bye joe"

11、SUNION

格式:sunion key [key …]
返回一個集合的全部成員,該集合是所有給定集合的並集。 不存在的 key 被視爲空集。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 是所有給定集合的成員數量之和。
返回值:
並集成員的列表。
示例代碼

redis> SMEMBERS songs
1) "Billie Jean"
redis> SMEMBERS my_songs
1) "Believe Me"
redis> SUNION songs my_songs
1) "Billie Jean"
2) "Believe Me"

12、SUNIONSTORE

格式:sunionstore destination key [key …]
這個命令類似於 SUNION 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集。 如果 destination 已經存在,則將其覆蓋。 destination 可以是 key 本身。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 是所有給定集合的成員數量之和。
返回值:
結果集中的元素數量。
示例代碼

redis> SMEMBERS NoSQL
1) "MongoDB"
2) "Redis"
redis> SMEMBERS SQL
1) "sqlite"
2) "MySQL"
redis> SUNIONSTORE db NoSQL SQL
(integer) 4
redis> SMEMBERS db
1) "MySQL"
2) "sqlite"
3) "MongoDB"
4) "Redis"

13、SDIFF

格式:sdiff key [key …]
返回一個集合的全部成員,該集合是所有給定集合之間的差集。 不存在的 key 被視爲空集。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 是所有給定集合的成員數量之和。
返回值:
交集成員的列表。
示例代碼

redis> SMEMBERS peter's_movies
1) "bet man"
2) "start war"
3) "2012"
redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SDIFF peter's_movies joe's_movies
1) "bet man"
2) "start war"

14、SDIFFSTORE

格式:sdiffstore destination key [key …]
這個命令的作用和 SDIFF 類似,但它將結果保存到 destination 集合,而不是簡單地返回結果集。 如果 destination 集合已經存在,則將其覆蓋。 destination 可以是 key 本身。
可用版本:

>=1.0.0

時間複雜度:
O(N), N 是所有給定集合的成員數量之和。
返回值:
結果集中的元素數量。
示例代碼

redis> SMEMBERS joe's_movies
1) "hi, lady"
2) "Fast Five"
3) "2012"
redis> SMEMBERS peter's_movies
1) "bet man"
2) "start war"
3) "2012"
redis> SDIFFSTORE joe_diff_peter joe's_movies peter's_movies
(integer) 2
redis> SMEMBERS joe_diff_peter
1) "hi, lady"
2) "Fast Five"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章