redis有序集合類型(sorted set)

有序集合(sorted set)是在集合(set)的基礎(chǔ)上為集合中的每個(gè)元素都關(guān)聯(lián)了一個(gè)分?jǐn)?shù)臣淤,這使得我們不僅可以完成插入淋硝、刪除和判斷元素是否存在等集合類型支持的操作损话,還能獲得分?jǐn)?shù)最高或最低的前N個(gè)元素、獲得指定分?jǐn)?shù)范圍內(nèi)的元素等與分?jǐn)?shù)相關(guān)的操作碑宴。雖然集合中的每個(gè)元素都是不同的殖属,但是他們的分?jǐn)?shù)卻可以相同姐叁。

有序集合在某些方面和列表類型有些相似

1)二者都是有序的

2)二者都可以獲得某一范圍的元素

但是二者也有很大的區(qū)別,這使得他們的應(yīng)用場(chǎng)景也不相同洗显。

1)列表類型是通過鏈表實(shí)現(xiàn)的外潜,獲取靠近兩端的數(shù)據(jù)速度極快,而當(dāng)元素增多后挠唆,訪問中間元素的速度會(huì)比較慢处窥,所以它更適合實(shí)現(xiàn)如“新鮮事”或“日志”這樣很少訪問中間元素的應(yīng)用。

2)有序集合類型是使用散列表和跳躍表(skip list)實(shí)現(xiàn)的损搬,所以即使讀取位于中間的數(shù)據(jù)速度也很快(時(shí)間復(fù)雜度是O(log(N))碧库。

3)列表中不能簡(jiǎn)單的調(diào)整某個(gè)元素的位置柜与,但是有序集合可以(通過更改這個(gè)元素的分?jǐn)?shù))。

4)有序集合要比列表類型更耗費(fèi)內(nèi)存嵌灰。

命令

1弄匕、增加元素

ZADD key score member [score member ...]

ZADD命令用來向有序集合中增加一個(gè)元素和該元素的分?jǐn)?shù),如果元素已經(jīng)存在則會(huì)用新的分?jǐn)?shù)替換原有分?jǐn)?shù)沽瞭,此命令返回的使新增加到集合中的元素個(gè)數(shù)迁匠。分?jǐn)?shù)可以是整數(shù)也可以是浮點(diǎn)數(shù),其中+inf 和-inf分表表示正無窮和負(fù)無窮驹溃。

2城丧、獲得元素的分?jǐn)?shù)

ZSCORE key member

3、獲得排名在某個(gè)范圍的元素列表

ZRANGE? ? key start stop [WITHSCORES]

ZREVRANGE key start stop [WITHSCORES]

ZRANGE命令會(huì)按照元素分?jǐn)?shù)從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)豌鹤。ZRANGE命令與LRANGE命令十分相似亡哄,如索引都是從0開始,負(fù)數(shù)代表從后向前查找(-1表示最后一個(gè)元素)布疙。如果需要同時(shí)獲得元素的分?jǐn)?shù)的話在ZRANGE命令尾部加上WITHSCORES參數(shù)蚊惯,這時(shí)返回的數(shù)據(jù)格式就從“元素1,元素2灵临,...截型,元素N”變?yōu)椤霸?,分?jǐn)?shù)1儒溉,元素2宦焦,分?jǐn)?shù)2,...顿涣,元素N波闹,分?jǐn)?shù)N”。

ZRANGE命令的時(shí)間復(fù)雜度是O(log n + m)(其中n 為有序集合的技術(shù)园骆,M為返回的元素個(gè)數(shù))舔痪,如果兩個(gè)元素的分?jǐn)?shù)相同寓调,Redis會(huì)按照字典順序來進(jìn)行排序锌唾。

ZREVRANGE與ZRANGE唯一的不同就在于ZREVRANGE命令是按照元素分?jǐn)?shù)從大到小的順序給出結(jié)果的。

4夺英、獲取指定分?jǐn)?shù)范圍的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

ZRANGEBYSCORE命令的參數(shù)雖多晌涕,但是相對(duì)好理解,此命令按照元素分?jǐn)?shù)從大到小的順序返回分?jǐn)?shù)在min 和max之間(包含兩端)的元素痛悯。

如果希望分?jǐn)?shù)范圍不好喊端點(diǎn)值余黎,可以在分?jǐn)?shù)前面加上“(”符號(hào),例如如果希望返回80到100的數(shù)據(jù)载萌,可以包含80但是不包含100惧财,命令:ZRANGEBYSCORE key 80 (100

min 和max還支持無窮大巡扇,同ZADD一樣-inf和+inf分表表示負(fù)無窮和正無窮,比如希望拿到所有高于80分的數(shù)據(jù)(不包含80分)垮衷,ZRANGEBYSCORE key (80 +inf

WITHSCORES與前面的ZRANGE用法相同厅翔,LIMIT offset count 與sql的語法基本相同,即在獲得的元素列表的基礎(chǔ)上向后偏移offset個(gè)元素搀突,并且只獲得前count個(gè)元素刀闷。

5、增加某個(gè)元素的分?jǐn)?shù)

ZINCRBY key increment member

ZINCRBY可以增加一個(gè)元素的分?jǐn)?shù)仰迁,返回值是更改后的分?jǐn)?shù)甸昏。如果increment為負(fù)數(shù)則表示減分。

6徐许、獲得集合中元素的數(shù)量

ZCARD key

7施蜜、獲得指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)

ZCOUNT key min max

ZCOUNT命令的min 和max參數(shù)的特性和ZRANGEBYSCORE命令中的一樣。

8雌隅、刪除一個(gè)或多個(gè)元素

ZREM key member [member ..]

此命令返回成功刪除的元素的數(shù)量

9花墩、按照排名范圍刪除元素

ZREMRANGEBYRANK key start stop

ZREMRANGEBYRANK命令按照元素分?jǐn)?shù)從小到大的順序刪除在指定排名范圍內(nèi)的所有元素,并返回刪除的元素個(gè)數(shù)澄步。

10冰蘑、按照分?jǐn)?shù)范圍刪除元素

ZREMRANGEBYSCORE key min max

ZREMRANGEBYSCORE命令會(huì)刪除指定分?jǐn)?shù)范圍內(nèi)的所有元素,參數(shù)min和max特性跟ZRANGEBYSCORE命令中一樣村缸,返回值是刪除的元素?cái)?shù)量祠肥。

11、獲得元素的排名

ZRANK key member

ZREVRANK key member

ZRANK命令會(huì)哦按照元素分?jǐn)?shù)從小到大的順序獲得指定的元素排名(從0開始)梯皿。ZREVRANK命令則相反仇箱。

12、計(jì)算有序集合的交集

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight...]] [AGGREGATE SUM | MIN | MAX]

ZINTERSTORE命令用來計(jì)算多個(gè)有序集合的交集并將結(jié)果存儲(chǔ)在destination鍵中(同樣以有序集合類型存儲(chǔ))东羹,返回值為destination鍵中元素的個(gè)數(shù)剂桥。

destination鍵中元素的分?jǐn)?shù)是由AGGREGATE參數(shù)決定的。

1)當(dāng)AGGREGATE是SUM時(shí)(也就是默認(rèn))属提,destination鍵中元素的分?jǐn)?shù)是每個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的和权逗。

2)當(dāng)AGGREGATE是MIN時(shí),destination鍵中元素的分?jǐn)?shù)是每個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的最小值冤议。

3)當(dāng)AGGREGATE是MAX時(shí)斟薇,destination鍵中元素的分時(shí)是每個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的最大值。

ZINTERSTORE命令還能通過WEIGHTS 參數(shù)設(shè)置沒每個(gè)集合的權(quán)重恕酸,每個(gè)集合在參與計(jì)算式元素的分?jǐn)?shù)會(huì)被乘上該集合的權(quán)重堪滨。

另外還有一個(gè)命令與ZINTERSTORE命令用法一樣,名為ZUNIONSTORE他的作用是計(jì)算集合間的并集蕊温。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袱箱,一起剝皮案震驚了整個(gè)濱河市遏乔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌发笔,老刑警劉巖按灶,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異筐咧,居然都是意外死亡鸯旁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門量蕊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铺罢,“玉大人,你說我怎么就攤上這事残炮【伦福” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵势就,是天一觀的道長(zhǎng)泉瞻。 經(jīng)常有香客問我,道長(zhǎng)苞冯,這世上最難降的妖魔是什么袖牙? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮舅锄,結(jié)果婚禮上鞭达,老公的妹妹穿的比我還像新娘。我一直安慰自己皇忿,他們只是感情好畴蹭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鳍烁,像睡著了一般叨襟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幔荒,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天糊闽,我揣著相機(jī)與錄音,去河邊找鬼铺峭。 笑死墓怀,一個(gè)胖子當(dāng)著我的面吹牛汽纠,可吹牛的內(nèi)容都是我干的卫键。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼虱朵,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼莉炉!你這毒婦竟也來了钓账?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤絮宁,失蹤者是張志新(化名)和其女友劉穎梆暮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绍昂,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啦粹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窘游。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唠椭。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖忍饰,靈堂內(nèi)的尸體忽然破棺而出贪嫂,到底是詐尸還是另有隱情,我是刑警寧澤艾蓝,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布力崇,位于F島的核電站,受9級(jí)特大地震影響赢织,放射性物質(zhì)發(fā)生泄漏亮靴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一于置、第九天 我趴在偏房一處隱蔽的房頂上張望台猴。 院中可真熱鬧,春花似錦俱两、人聲如沸饱狂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽休讳。三九已至,卻和暖如春尿孔,著一層夾襖步出監(jiān)牢的瞬間俊柔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工活合, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雏婶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓白指,卻偏偏與公主長(zhǎng)得像留晚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子告嘲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

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