辛星淺析Redis中的有序集合

來源:互聯網
上載者:User

標籤:redis   有序集合   sorted set   辛星   

      Redis中的有序集合也就是sorted-set,它和set很相似,都是字串的集合,都不允許重複的成員出現在一個集合張。有序集合與集合的主要差別是有序集合中的每一個元素都有一個序號與其相連,這個序號即score,Redis通過這個序號來為集合中的成員進行從小到大的排列。需要特別說明的是,儘管有序集合的元素值是唯一的,但是該value對應的score卻可以是多個。在有序集合中添加、刪除、更新一個成員的操作都很快,其時間複雜度是集合中成員的對數。 因為有序集合中的成員在集合中的位置是有序的,即便是訪問集合中間部分的成員的效率也很高。

     我們可以使用有序集合來設計一個類似於積分熱門排行榜的東西,那麼每當使用者的積分發生變化時,可以實行zadd命令來更新使用者的積分,然後通過zrange來擷取積分前若干的使用者資訊。當然也可以利用zrank命令來通過username來擷取使用者的排行資訊。

     下面是有序集合的常見命令:

     (1)zadd   集合名    下標1   元素1   [下標2    元素2.....]   它是向有序集合中添加元素,在該命令中我們可以指定多組的下標元素對。如果在添加時參數中的某一成員已經存在,那麼該命令將會更新此成員的分數為新值,同時再將該成員基於該新值重新排序。如果集合名不存在,該命令會建立一個新的有序集合,並且將下標元素對插入其中。如果集合名已存在,但是其作為key與之關聯的value並不是有序集合,那麼將會返回錯誤資訊。該操作的返回值是實際插入的成員數量。

     (2)zcard    集合名    該命令會擷取有序集合中的成員數量。返回值是有序集合中的成員數量,如果該有序集合不存在,那麼返回0.

     (3)zcount   集合名  最小下標   最大下標    其中我們可以使用+inf或者-inf,其中+inf表示有序集合中下標的最大值,而-inf則表示有序集合中的最小值。在預設情況下,最小下標和最大下標都是閉區間的,但是我們可以在最小下標或者最大下標中添加一個"("來表示開區間。它返回的是指定下標範圍內的元素的數量。

     (4)zincrby   集合名    增量    元素名     它可以為指定的有序集合張的指定成員的下標增加一個增量,如果成員不存在,該命令添加該成員並且假設其初始下標為0,伺候在將其下標加上增量。如果集合名不存在,那麼該命令將會自動建立該集合,並且添加相應的鍵值對。它返回的是以字串形式表示的新下標。

    (5)zrange   集合名   起始下標   結束下標  [withscores]     它會返回下標在起始下標與結束下標之間的成員,注意這裡的下標是從0開始的,而-1則表示最後一個成員。我們的選擇性參數withscores表示同時返回每個成員的下標。它表示返回索引在起始下標與結束下標之間的成員列表。

    (6)zrangebyscore   集合名  最小下標   最大下標   [withscores ][limit  offset  count]  該命令返回下標在最小下標到最大下表中中的所有成員,它返回的成員按照分數從低到高的順序返回,如果成員有相同的分數,則按成員的字典順序返回。可選的limit用於控制返回成員的數量範圍。可選的參數offset表示從合格第offset個成員開始返回,同時返回count個成員。

   (7)zrank   集合名   元素名      它是該集合中的成員按照下標從低到高的順序儲存,該命令將返回參數中指定成員的位置值,其中0表示參數中指定成員的位置值。

   (8)zrem    集合名   元素1   元素2   ..... 該命令移除參數中指定的成員,如果不存在則會被忽略。它返回的是實際被刪除的成員數量。

 (9)zrevrange   集合名   起始下標   結束下標 [withscores]     它與zrange基本相同,唯一的差別在於該命令通過反向排序擷取指定位置的成員,也就是從高到低的順序。

   (10)zrevrank   集合名    元素     它擷取排名的時候是從高到低的順序來編號的,注意下標最大的順序為0奧

   (11)zscore    集合名   元素       它擷取指定集合名中的指定成員的下標

   (12)zrevrangebyscore   集合名   最大下標   最小下標  [withscores][limit offset count]     該命令除了排序方式是基於從高到低的下標排序之外,其他的和zrangebyscore相同。

    (13)zremrangebyrank   集合名   起始下標   結束下標    它是刪除索引位置位於起始下標和結束下標之間的成員,注意起始下標和結束下標都是0-based,也就是0表示分數最低的成員,而-1表示最後一個成員,即分數最高的成員。

    (14)zremrangebyscore   集合名    最小下標   最大下標    它是刪除分數在最小下標和最大下標之間的所有成員,對於最小下標和最大下標,也可以採用開區間的形式。


       基本我們就介紹到這裡啦,希望有用。

辛星淺析Redis中的有序集合

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.