redis | 六腰埂、redis之Set

redis系列文章:
https://liudongdong.top/categories/redis
本篇來源:
https://liudongdong.top/archives/redisliu-redis-zhi-set
公眾號:雨中散步撒哈拉
備注:歡迎關(guān)注公眾號痪署,一起學(xué)習(xí),共同進(jìn)步!

一潘鲫、基本概念

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的肋杖,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)溉仑。

集合對象的編碼可以是 intset 或者 hashtable。

Redis 中集合是通過哈希表實現(xiàn)的状植,所以添加浊竟,刪除,查找的復(fù)雜度都是 O(1)津畸。

集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)振定。

實例:

127.0.0.1:6379> sadd sets one two three
(integer) 3
127.0.0.1:6379> smembers sets
1) "three"
2) "one"
3) "two"
127.0.0.1:6379>

二、Set分類

根據(jù)個人理解和便于學(xué)習(xí)肉拓,進(jìn)行了簡單的分類后频!
大致分為以下幾類:

  1. 增加成員
  2. 刪除成員
  3. 修改成員
  4. 查詢成員
  5. 集合操作

1. 增加成員

  1. sadd:增加成員

2. 刪除成員

  1. spop:移除隨機(jī)成員
  2. srem:移除指定成員

3. 修改成員命令

  1. smove:移動成員到另一個集合中

4. 查詢成員

  1. scard:查詢成員總數(shù)
  2. sismember:查詢該成員是否存在
  3. smembers:查詢所有成員
  4. srandmember:返回集合一個或多個隨機(jī)數(shù)

5. 集合操作

  1. sdiff:倆個集合之間的差集
  2. sdiffstore:倆個集合之間的差集,結(jié)果放到新的set中
  3. sinter:倆個集合之間的交集
  4. sinterstore:倆個集合之間的交集暖途,結(jié)果放到新的set中
  5. sunion:倆個集合之間的并集
  6. sunionstore:倆個集合之間的并集卑惜,結(jié)果放到新的set中

三、命令實踐

1. 增加成員

127.0.0.1:6379> sadd sets one two three
(integer) 3
127.0.0.1:6379> smembers sets
1) "three"
2) "one"
3) "two"
127.0.0.1:6379>

2. 刪除成員

127.0.0.1:6379> smembers sets
1) "three"
2) "one"
3) "two"
# 刪除一個或多個隨機(jī)值
127.0.0.1:6379> spop sets 1
1) "three"
127.0.0.1:6379> smembers sets
1) "one"
2) "two"
# 移除指定成員
127.0.0.1:6379> srem sets one
(integer) 1
127.0.0.1:6379> smembers sets
1) "two"
127.0.0.1:6379>

3. 修改成員

127.0.0.1:6379> smembers sets
1) "two"
127.0.0.1:6379> sadd sets2 a
(integer) 1
127.0.0.1:6379> smembers sets2
1) "a"
# 修改成員驻售,到新的集合中
127.0.0.1:6379> smove sets sets2 two
(integer) 1
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> smembers sets
(empty list or set)
127.0.0.1:6379> 

4. 查詢成員

# 查詢成員總數(shù)
127.0.0.1:6379> scard sets2
(integer) 2
# 查詢集合所有成員
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
# 判斷成員是否存在集合中
127.0.0.1:6379> sismember sets2 one
(integer) 0
127.0.0.1:6379> sismember sets2 two
(integer) 1
# 返回集合中的一個或多個值
127.0.0.1:6379> srandmember sets2 1
1) "two"
127.0.0.1:6379> srandmember sets2 1
1) "two"
127.0.0.1:6379> srandmember sets2 2
1) "a"
2) "two"
127.0.0.1:6379>

5. 集合操作

1. 差集

Redis Sdiff 命令返回第一個集合與其他集合之間的差異露久,也可以認(rèn)為說第一個集合中獨有的元素。不存在的集合 key 將視為空集欺栗。

差集的結(jié)果來自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1毫痕,也不是整個 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集征峦。

127.0.0.1:6379> smembers sets
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> sdiff sets sets2
1) "c"
2) "b"
127.0.0.1:6379> sadd sets3 1
(integer) 1
127.0.0.1:6379> sdiffstore sets3 sets sets2
(integer) 2
127.0.0.1:6379> smembers sets3
1) "c"
2) "b"
127.0.0.1:6379>

2. 交集

Redis Sinter 命令返回給定所有給定集合的交集。 不存在的集合 key 被視為空集消请。 當(dāng)給定集合當(dāng)中有一個空集時栏笆,結(jié)果也為空集(根據(jù)集合運算定律)。

127.0.0.1:6379> smembers sets
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> smembers sets3
1) "c"
2) "b"
127.0.0.1:6379> sinter sets sets2
1) "a"
127.0.0.1:6379> sinterstore sets3 sets sets2
(integer) 1
127.0.0.1:6379> smembers sets3
1) "a"
127.0.0.1:6379>

3. 并集

Redis Sunion 命令返回給定集合的并集梯啤。不存在的集合 key 被視為空集竖伯。

127.0.0.1:6379> smembers sets
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> smembers sets2
1) "a"
2) "two"
127.0.0.1:6379> smembers sets3
1) "a"
127.0.0.1:6379> sunion sets sets2
1) "a"
2) "c"
3) "two"
4) "b"
127.0.0.1:6379> sunionstore sets3 sets sets2
(integer) 4
127.0.0.1:6379> smembers sets3
1) "a"
2) "c"
3) "two"
4) "b"
127.0.0.1:6379>

附錄

下表列出了 Redis 集合基本命令:

序號 命令及描述
1 [SADD key member1 member2] 向集合添加一個或多個成員
2 SCARD key 獲取集合的成員數(shù)
3 [SDIFF key1 key2] 返回第一個集合與其他集合之間的差異存哲。
4 [SDIFFSTORE destination key1 key2] 返回給定所有集合的差集并存儲在 destination 中
5 [SINTER key1 key2] 返回給定所有集合的交集
6 [SINTERSTORE destination key1 key2] 返回給定所有集合的交集并存儲在 destination 中
7 SISMEMBER key member 判斷 member 元素是否是集合 key 的成員
8 SMEMBERS key 返回集合中的所有成員
9 SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
10 SPOP key 移除并返回集合中的一個隨機(jī)元素
11 [SRANDMEMBER key count] 返回集合中一個或多個隨機(jī)數(shù)
12 [SREM key member1 member2] 移除集合中一個或多個成員
13 [SUNION key1 key2] 返回所有給定集合的并集
14 [SUNIONSTORE destination key1 key2] 所有給定集合的并集存儲在 destination 集合中
15 [SSCAN key cursor MATCH pattern] [COUNT count] 迭代集合中的元素
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末因宇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子祟偷,更是在濱河造成了極大的恐慌察滑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件修肠,死亡現(xiàn)場離奇詭異贺辰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嵌施,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門饲化,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吗伤,你說我怎么就攤上這事吃靠【妫” “怎么了扼倘?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長护桦。 經(jīng)常有香客問我巧号,道長族奢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任丹鸿,我火速辦了婚禮越走,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘靠欢。我一直安慰自己廊敌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布掺涛。 她就那樣靜靜地躺著庭敦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪薪缆。 梳的紋絲不亂的頭發(fā)上秧廉,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天伞广,我揣著相機(jī)與錄音,去河邊找鬼疼电。 笑死嚼锄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔽豺。 我是一名探鬼主播区丑,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼修陡!你這毒婦竟也來了沧侥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魄鸦,失蹤者是張志新(化名)和其女友劉穎宴杀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拾因,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡旺罢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绢记。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扁达。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蠢熄,靈堂內(nèi)的尸體忽然破棺而出跪解,到底是詐尸還是另有隱情,我是刑警寧澤护赊,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布惠遏,位于F島的核電站,受9級特大地震影響骏啰,放射性物質(zhì)發(fā)生泄漏节吮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一判耕、第九天 我趴在偏房一處隱蔽的房頂上張望透绩。 院中可真熱鬧,春花似錦壁熄、人聲如沸帚豪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狸臣。三九已至,卻和暖如春昌执,著一層夾襖步出監(jiān)牢的瞬間烛亦,已是汗流浹背诈泼。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留煤禽,地道東北人铐达。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像檬果,于是被迫代替她去往敵國和親瓮孙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容