redis--set

1. 介紹

和java的set相同网杆,set就是一個==不允許重復==的list吃环。set也可以進行增加也颤、刪除、修改郁轻、查詢等操作翅娶。不同的是文留,list執(zhí)行查詢的花費為O(n),n取決于在list的index。而set執(zhí)行查詢的花費為O(1).

因為set不允許重復竭沫,所以當多次增加相同的元素燥翅,只會保留最后一份。set可以在服務器上完成set之間的聚合操作蜕提,因為在服務端完成森书,所以效率非常高,節(jié)省IO網絡的消耗谎势。

2. 命令

2.1 增加

命令:==SADD key value1 [value2 ...]==

命令說明:向指定key中插入values凛膏,如果value存在,那么什么都不做脏榆,如果不存在猖毫,則會增加。如果key對應的不是set結構须喂,執(zhí)行異常吁断。

返回值:實際增加的數(shù)量。

image-20200716191816318

2.2 統(tǒng)計個數(shù)

命令:==SCARD key==

命令說明:獲取指定key的set的元素個數(shù)坞生。

返回值:0:key不存在或者set內元素為空仔役;非0:實際key對應的set的元素的數(shù)量。

image-20200716192056745

2.3 是否存在

命令:==SISMEMBER key element==

命令說明:判斷元素element是否在指定key的set中存在是己。如果key對應的不是set又兵,執(zhí)行異常。

返回值:1:存在赃泡;0:元素不存在或者key不存在。

image-20200716192522452

2.4 獲取全部set

命令:==SMEMBERS key==

命令說明:獲取指定key的set的全部元素乘盼。

返回值:指定key對應的set的元素的列表升熊。如果key不存在返回空。如果key對應的不是set绸栅,執(zhí)行異常级野。

image-20200716193135013

2.5 隨機取出元素

命令:==SPOP key [count]==

命令說明:隨機取出key對應的set中的count個元素,count可以省略粹胯,省略表示1個蓖柔。因為set內部元素的布局不受外界控制,所以取出的元素不可控风纠。取出元素后况鸣,會將元素從set中移除。count大于set的總數(shù)竹观,那么刪除全部set元素镐捧;如果count等于0潜索,那么什么都不做。

返回值:取出的元素懂酱。如果key對應的set為空或者key不存在竹习,那么返回空。如果key對應的不是set列牺,執(zhí)行異常整陌。

image-20200716193622597

2.6 刪除

命令:==SREM key element [element1 ...]==

命令說明:從指定的key的set中刪除指定的element。如果element不存在將會被忽略瞎领。如果key不存在泌辫,那么該操作什么都不改變。

返回值:實際刪除的元素數(shù)量默刚。如果key對應的不是set甥郑,執(zhí)行異常。

image-20200716195628098

2.7 隨機獲取元素

命令:==SRANDMEMBER key [count]==

命令說明:隨機返回指定key的set中count個元素荤西,count可以省略澜搅,省略表示1個。==該操作不會將element從set中刪除邪锌。==count大于set的總數(shù)勉躺,那么返回全部set元素;如果count等于0觅丰,那么什么都不做饵溅;如果count小于0,那么返回count個元素妇萄,==可能重復==蜕企。

返回值:set中隨機的元素列表。如果key不存在返回空列表冠句。如果key對應的不是set執(zhí)行異常轻掩。

image-20200716200547127

2.8 轉移元素

命令:==SMOVE source dest element==

命令說明:將指定element從source中刪除,并加入到dest中懦底。如果dest不存在則會創(chuàng)建唇牧。如果source中不存在element則什么都不做。如果dest中已經給有了element聚唐,那么該命令就是將element從source中刪除丐重。如果source或者dest中存在任意一個不是set,那么執(zhí)行異常杆查。

返回值:1:正常移動扮惦;0:source中不存在element。

image-20200716201121133

2.9 差集

命令:==SDIFF key [key1 ....]==

命令說明:以第一個key的set為基準亲桦,返回后面key的set與第一個key的set的差集元素集合径缅。如果key不存在則視為空set掺栅。如果任意key不是set,那么執(zhí)行異常纳猪。

返回值:差異元素的list==(list最少為空氧卧,最多為第一個key對應的元素)==

image-20200716201754704

2.10 差集存儲

命令:==SDIFFSTORE dest key [key1 ...]==

命令說明:獲取key的set與后面key對應的set的差集元素,然后將差集元素放到dest中氏堤。如果dest不存在沙绝,則新建。如果dest已經存在鼠锈,則覆蓋dest闪檬。如果dest,keys任意一個不是set,執(zhí)行異常购笆。

返回值:差集元素數(shù)量粗悯。

image-20200716202222242

2.11 交集

命令:==SINTER key [key1 ...]==

命令說明:獲取指定keys的set的交集元素。如果任意一個key的set為空或者key不存在,那么交集也是空。如果任意一個key不是set咐汞,那么執(zhí)行異常羹令。

返回值:交集元素list钧忽。

image-20200716202802520

2.12 交集存儲

命令:==SINTERSTORE dest key [key1 ....]==

命令說明:獲取keys的set的交集元素,然后將交集元素存入dest中。如果dest不存在,那么創(chuàng)建撤逢。如果dest不為空,那么覆蓋dest粮坞。如果dest,keys任意一個不是set蚊荣,那么執(zhí)行異常。

返回值:交集元素數(shù)量莫杈。

image-20200716203235789

2.13 并集

命令:==SUNION key [key1 ...]==

命令說明:獲取keys的set的所有元素的并集元素互例。如果key不存在,那么將被當做空set處理姓迅。如果任意key不是set敲霍,執(zhí)行異常俊马。

返回值:并集元素list丁存。

image-20200716204119727

2.14 并集存儲

命令:==SUNIONSTORE dest key [key1 ...]==

命令說明:獲取keys的set的所有元素的并集元素,然后將元素存入dest柴我。如果dest不存在解寝,那么創(chuàng)建。如果dest存在艘儒,那么覆蓋dest聋伦。如果dest,keys任意不是set夫偶,那么執(zhí)行異常。

返回值:并集元素數(shù)量觉增。

image-20200716203956503

3. 示例

3.1 隨機展示

首頁隨機展示信息:

創(chuàng)建信息set兵拢,然后每次打開首頁,從set中隨機取出n條逾礁。

image-20200716204401187

3.2 隨機執(zhí)行

多線程條件下说铃,任務存儲在redis的set中,每個線程隨機獲取n個任務執(zhí)行嘹履。

創(chuàng)建tasks的set,然后每次隨機取出n個任務腻扇。

image-20200716204615907

3.3 黑白名單

借助set的不可重復以及查詢高效的特性,做黑白名單砾嫉。

創(chuàng)建wl白名單和bl黑名單幼苛,每次請求時判斷。

用戶要么在黑名單焕刮,要么在白名單舶沿。

==白名單優(yōu)先==

首先獲取白名單的交集 => twl

然后將白名單的差集從黑名單中取出。

image-20200716210025155

==黑名單優(yōu)先==

首先獲取黑名單的交集 => tbl

然后將黑名單的差集從白名單中取出济锄。

image-20200716210229874

==判斷是否在黑名單中==

image-20200716210328960
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末暑椰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荐绝,更是在濱河造成了極大的恐慌一汽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件低滩,死亡現(xiàn)場離奇詭異召夹,居然都是意外死亡,警方通過查閱死者的電腦和手機恕沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門监憎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婶溯,你說我怎么就攤上這事鲸阔。” “怎么了迄委?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵褐筛,是天一觀的道長。 經常有香客問我叙身,道長渔扎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任信轿,我火速辦了婚禮晃痴,結果婚禮上残吩,老公的妹妹穿的比我還像新娘。我一直安慰自己倘核,他們只是感情好泣侮,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著紧唱,像睡著了一般旁瘫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琼蚯,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天酬凳,我揣著相機與錄音,去河邊找鬼遭庶。 笑死宁仔,一個胖子當著我的面吹牛,可吹牛的內容都是我干的峦睡。 我是一名探鬼主播翎苫,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榨了!你這毒婦竟也來了煎谍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤龙屉,失蹤者是張志新(化名)和其女友劉穎呐粘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體转捕,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡作岖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了五芝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痘儡。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖枢步,靈堂內的尸體忽然破棺而出沉删,到底是詐尸還是另有隱情,我是刑警寧澤醉途,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布矾瑰,位于F島的核電站,受9級特大地震影響结蟋,放射性物質發(fā)生泄漏脯倚。R本人自食惡果不足惜渔彰,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一嵌屎、第九天 我趴在偏房一處隱蔽的房頂上張望推正。 院中可真熱鬧,春花似錦宝惰、人聲如沸植榕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尊残。三九已至,卻和暖如春淤堵,著一層夾襖步出監(jiān)牢的瞬間寝衫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工拐邪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慰毅,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓扎阶,卻偏偏與公主長得像汹胃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子东臀,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361