新聞中心
redis是一個開源的,先進的key-value存儲,屬于非關(guān)系型緩存數(shù)據(jù)庫,通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。redis一共有五種基本的數(shù)據(jù)類型,String類型、hash類型、list類型以及set(無序集合)和zset(有序集合),本篇文章為大家分享一下set類型使用方法。

目前創(chuàng)新互聯(lián)建站已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、黃梅網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
set數(shù)據(jù)結(jié)構(gòu),也是隨著元素數(shù)目的多少而變化。當set中添加的元素都是整數(shù)且元素數(shù)據(jù)較少時,set使用intset為底層的數(shù)據(jù)結(jié)構(gòu),否則,set使用dict作為底層的數(shù)據(jù)結(jié)構(gòu)。
常用操作命令
sadd:添加元素到指定key的集合
命令
SADD key member [member ...]
說明
添加一個或多個指定的member元素到集合的 key中.指定的一個或者多個元素member 如果已經(jīng)在集合key中存在則忽略.如果集合key 不存在,則新建集合key,并添加member元素到集合key中.
如果key 的類型不是集合則返回錯誤.
返回值
返回新成功添加到集合里元素的數(shù)量,不包括已經(jīng)存在于集合中的元素.
例子
redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SADD myset "World"
(integer) 0
redis> SMEMBERS myset
1) "World"
2) "Hello"
redis>
scard:獲取集合元素的數(shù)量
命令
SCARD key
說明
返回集合存儲的key的基數(shù) (集合元素的數(shù)量).
返回值
集合的基數(shù)(元素的數(shù)量),如果key不存在,則返回 0.
例子
redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SCARD myset
(integer) 2
redis>
1234567
sdiff:返回一個集合與給定集合的差集的元素.
命令
SDIFF key [key ...]
返回值
結(jié)果集的元素
例子
redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFF key1 key2
1) "a"
2) "b"
redis>
sdiffstore:將一個集合與給定集合差集的元素存入另一個集合中
命令
SDIFFSTORE destination key [key ...]
返回值
該命令類似于 SDIFF, 不同之處在于該命令不返回結(jié)果集,而是將結(jié)果存放在destination集合中.
如果destination已經(jīng)存在, 則將其覆蓋重寫.
例子
redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SDIFFSTORE key key1 key2
(integer) 2
redis> SMEMBERS key
1) "b"
2) "a"
redis>
123456789101112131415161718
sinter:獲取指定集合的交集
命令
SINTER key [key ...]
說明
如果key不存在則被認為是一個空的集合,當給定的集合為空的時候,結(jié)果也為空.(一個集合為空,結(jié)果一直為空).
返回值
結(jié)果集成員的列表.
例子
redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SINTER key1 key2
1) "c"
redis>
sinterstore:將指定集合的交集存入另一個集合
命令
SINTERSTORE destination key [key ...]
說明
這個命令與SINTER命令類似, 但是它并不是直接返回結(jié)果集,而是將結(jié)果保存在 destination集合中.
如果destination 集合存在, 則會被重寫.
返回值
結(jié)果集中成員的個數(shù).
例子
redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SINTERSTORE key key1 key2
(integer) 1
redis> SMEMBERS key
1) "c"
redis>
sismember:判斷集合中是否含有指定元素
命令
SISMEMBER key member
說明
返回成員 member 是否是存儲的集合 key的成員.
返回值
1–member元素是集合key的成員
0-member元素不是key的成員,或者集合key不存在
例子
redis> SADD myset "one"
(integer) 1
redis> SISMEMBER myset "one"
(integer) 1
redis> SISMEMBER myset "two"
(integer) 0
redis>
smembers:獲取集合所有元素
命令
SMEMBERS key
說明
返回key集合所有的元素.
該命令的作用與使用一個參數(shù)的SINTER命令作用相同.
返回值
集合中的所有元素.
例子
redis> SADD myset "Hello"
(integer) 1
redis> SADD myset "World"
(integer) 1
redis> SMEMBERS myset
1) "World"
2) "Hello"
redis>
smove:從一個集合移動指定元素到另一個集合
命令
SMOVE source destination member
說明
將member從source集合移動到destination集合中. 對于其他的客戶端,在特定的時間元素將會作為source或者destination集合的成員出現(xiàn).
如果source 集合不存在或者不包含指定的元素,這smove命令不執(zhí)行任何操作并且返回0.否則對象將會從source集合中移除,并添加到destination集合中去,如果destination集合已經(jīng)存在該元素,則smove命令僅將該元素充source集合中移除. 如果source 和destination不是集合類型,則返回錯誤.
返回值
1–該元素成功移除1
0–該元素不是 source集合成員,無任何操作
例子
redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myotherset "three"
(integer) 1
redis> SMOVE myset myotherset "two"
(integer) 1
redis> SMEMBERS myset
1) "one"
redis> SMEMBERS myotherset
1) "three"
2) "two"
redis>
spop:隨機從集合中移除指定個數(shù)的元素
命令
SPOP key [count]
說明
從存儲在key的集合中移除并返回一個或多個隨機元素。
count參數(shù)將在更高版本中提供,但是在2.6、2.8、3.0中不可用。
例子
redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myset "three"
(integer) 1
redis> SPOP myset
1) "three"
redis> SMEMBERS myset
1) "one"
2) "two"
redis> SADD myset "four"
(integer) 1
redis> SADD myset "five"
(integer) 1
redis> SPOP myset 3
1) "one"
2) "four"
3) "two"
redis> SMEMBERS myset
1) "five"
srandmember:隨機從集合中查詢指定個數(shù)的元素
命令
SRANDMEMBER key [count]
說明
僅提供key參數(shù),那么隨機返回key集合中的一個元素.
Redis 2.6開始,可以接受 count 參數(shù),如果count是整數(shù)且小于元素的個數(shù),返回含有 count 個不同的元素的數(shù)組,如果count是個整數(shù)且大于集合中元素的個數(shù)時,僅返回整個集合的所有元素,當count是負數(shù),則會返回一個包含count的絕對值的個數(shù)元素的數(shù)組,如果count的絕對值大于元素的個數(shù),則返回的結(jié)果集里會出現(xiàn)一個元素出現(xiàn)多次的情況.
僅提供key參數(shù)時,該命令作用類似于SPOP命令,不同的是SPOP命令會將被選擇的隨機元素從集合中移除,而SRANDMEMBER僅僅是返回該隨記元素,而不做任何操作.
返回值
不使用count 參數(shù)的情況下該命令返回隨機的元素,如果key不存在則返回nil。
使用count參數(shù),則返回一個隨機的元素數(shù)組,如果key不存在則返回一個空的數(shù)組。
例子
redis> SADD myset one two three
(integer) 3
redis> SRANDMEMBER myset
"one"
redis> SRANDMEMBER myset 2
1) "three"
2) "one"
redis> SRANDMEMBER myset -5
1) "one"
2) "one"
3) "one"
4) "one"
5) "one"
redis>
rpoplpush:將一個列表的尾部元素放到另一個列表的頭部
命令
RPOPLPUSH source destination
說明
原子性地返回并移除存儲在 source 的列表的最后一個元素(列表尾部元素), 并把該元素放入存儲在 destination 的列表的第一個元素位置(列表頭部)。
例如:假設(shè) source 存儲著列表 a,b,c, destination存儲著列表 x,y,z。 執(zhí)行 RPOPLPUSH 得到的結(jié)果是 source 保存著列表 a,b ,而 destination 保存著列表 c,x,y,z。
如果 source 不存在,那么會返回 nil 值,并且不會執(zhí)行任何操作。 如果 source 和 destination 是同樣的,那么這個操作等同于移除列表最后一個元素并且把該元素放在列表頭部, 所以這個命令也可以當作是一個旋轉(zhuǎn)列表的命令。
返回值
被移除和放入的元素
例子
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOPLPUSH mylist myotherlist
"three"
redis> LRANGE mylist 0 -1
1) "one"
2) "two"
redis> LRANGE myotherlist 0 -1
1) "three"
redis>
srem:移除集合中指定的元素
命令
SREM key member [member ...]
說明
在key集合中移除指定的元素. 如果指定的元素不是key集合中的元素則忽略 如果key集合不存在則被視為一個空的集合,該命令返回0.
如果key的類型不是一個集合,則返回錯誤.
返回值
從集合中移除元素的個數(shù),不包括不存在的成員.
例子
redis> SADD myset "one"
(integer) 1
redis> SADD myset "two"
(integer) 1
redis> SADD myset "three"
(integer) 1
redis> SREM myset "one"
(integer) 1
redis> SREM myset "four"
(integer) 0
redis> SMEMBERS myset
1) "three"
2) "two"
redis>
sunion:獲取指定集合的并集
命令
SUNION key [key ...]
說明
返回給定的多個集合的并集中的所有成員.
不存在的key可以認為是空的集合.
例子
redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SUNION key1 key2
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
redis>
sunionstore:將指定集合的并集存儲在另一個集合中
命令
SUNIONSTORE destination key [key ...]
說明
該命令作用類似于SUNION命令,不同的是它并不返回結(jié)果集,而是將結(jié)果存儲在destination集合中.
如果destination 已經(jīng)存在,則將其覆蓋.
返回值
結(jié)果集中元素的個數(shù).
例子
redis> SADD key1 "a"
(integer) 1
redis> SADD key1 "b"
(integer) 1
redis> SADD key1 "c"
(integer) 1
redis> SADD key2 "c"
(integer) 1
redis> SADD key2 "d"
(integer) 1
redis> SADD key2 "e"
(integer) 1
redis> SUNIONSTORE key key1 key2
(integer) 5
redis> SMEMBERS key
1) "c"
2) "e"
3) "b"
4) "a"
5) "d"
redis>
網(wǎng)站名稱:Redis數(shù)據(jù)類型:Set使用方法
地址分享:http://m.fisionsoft.com.cn/article/cdsosip.html


咨詢
建站咨詢
