Redis數據結構詳解之Zset(五)

序言

Zset跟Set之間可以有並集運算,因爲他們存儲的數據字符串集合,不能有一樣的成員出現在一個zset中,但是爲什麼有了set還要有zset呢?zset叫做有序集合,而set是無序的,zset怎麼做到有序的呢?就是zset的每一個成員都有一個分數與之對應,並且分數是可以重複的。有序集合的增刪改由於有啦排序,執行效率就是非常快速的,即便是訪問集合中間的數據也是非常高效的。

下面我來展示下操作zset的redis命令

操作單個zset的redis命令

1、添加,如果值存在添加,將會重新排序。zadd

127.0.0.1:6379>zadd myZSet 1 zlh   ---添加分數爲1,值爲zlh的zset集合

127.0.0.1:6379>zadd mySet 2 Tom 3 Jim   ---添加2條zset集合,分別爲分數爲2、3,值爲tom、jim的集合。

2、查看zset集合的成員個數。zcard

127.0.0.1:6379>zcard myZSet   ---輸出zset的成員個數爲3

3、查看Zset指定範圍的成員,withscores爲輸出結果帶分數。zrange

127.0.0.1:6379>zrange mZySet 0 -1   ----0爲開始,-1爲結束,輸出順序結果爲: zlh tom jim

127.0.0.1:6379>zrange mZySet 0 -1 withscores   ---輸出帶分數的結果爲:zlh 1 tom 2 jim 3

4、獲取zset成員的下標位置,如果值不存在返回null。zrank

127.0.0.1:6379>zrank mZySet Jim    ---Jim的在zset集合中的下標爲2

5、獲取zset集合指定分數之間存在的成員個數。zcount

127.0.0.1:6379>zcount mySet 1 3   ---輸出分數>=1 and 分數 <=3的成員個數爲3,因爲分數是可以重複的,所以這個命令是有道理的。

6、刪除指定的一個成員或多個成員。zrem

127.0.0.1:6379>zrem myZSet zlh   --刪除值爲zlh的zset成員

127.0.0.1:6379>zrem myZSet Tom Jim    ---刪除值爲Tom和Jim的兩個zset成員

7、獲取指定值的分數。zscore

127.0.0.1:6379>zadd myZset 1 zlh 1 tom 2 jim 3 xdd 4 pmm   ---由於上面的數據被刪除完了,這裏添加5條示範數據再。

127.0.0.1:6379>zscore myZset zlh    ---輸出值爲zlh的分數爲1

8、給指定元素的分數進行增減操作,負值爲減,正值爲加。zincrby

127.0.0.1:6379>zscore myZset tom    ----輸出tom的分數爲1

127.0.0.1:6379>zincrby myZset 4 tom   ---tom的分數值加4,輸入分數值爲5

127.0.0.1:6379>zscore myZset tom    ---輸出tom的分數值爲5

9、根據指定分數的範圍獲取值。zrangebysocre

127.0.0.1:6379>zrangebyscore myZset  1 5   ---輸出分數>=1 and <=5的成員值爲:zlh jim xdd pmm  tom

127.0.0.1:6379>zrangebyscore myZset  (1 5    ----輸出分數>1 and <=5的成員值爲:jim xdd pmm tom

127.0.0.1:6379>zrangebyscore myZset 2 5 limit 1 2    ---檢索分數爲2到5之間的數據,然後從下標爲1的數據開始往後輸出2個數據,包含下標爲1的數據。結果爲:xdd pmm

127.0.0.1:6379>zrangebyscore myZset -inf +inf limit 2 3   ----+inf表示最後一個成員,-inf表示第一個成員,意思是:檢索所有數據,然後從下標爲2的數據開始再往後輸出2個數據。結果爲:xdd pmm tom

10、倒序,從高到底排序輸出指定範圍的數據。zrevrange,zrevrangebyscore

127.0.0.1:6379>zrevrange myZset 2 3   ---先倒序排列數據,輸出下標爲>=2 and <=3的數據爲xdd jim,這裏注意的是倒序之後下標也反過來了。

127.0.0.1:6379>zrevrange myZset 2 4 withscores    ---輸出結果爲:xdd 3 jim 2 zlh 1

127.0.0.1:6379>zrevrangebyscore myZset 5 1 limit  3 2  ----輸出結果爲:jim zlh 。獲取score <=5 and >=1,從下標爲爲3開始獲取2條數據。

127.0.0.1:6379>zrevrangebyscore myZset 4 2   ----分數>=2 and <=4 的數據倒序輸出:pmm xdd jim

11、根據座標,分數範圍刪除數據。zremrangebyscore,zremrangebyrank

127.0.0.1:6379>zremrangebyscore myZset 1 2   ---刪除分數>=1 and <=2的數據

127.0.0.1:6379>zrange myZset 0 -1    ----輸出結果爲 xdd pmm tom

127.0.0.1:6379>zremrangebyrank myZset 0 2    ---刪除下標>=0 and <=2的zset元素

127.0.0.1:6379>zrange myZset 0 -1    --輸出結果爲:empty list or set 。沒數據啦。

操作多個zset的redis命令

1、求多個zset的並集

127.0.0.1:6379>zadd myZset 1 zlh 2 jim 3 tom   ---添加3個數據

127.0.0.1:6379>zadd youZset 1 zlh 2 xdd 3 pmm    ---添加3個數據

127.0.0.1:6379>zunionzstore heZset 2 myZset youZset  ----將myzset和youzset的並集添加到hezset中。

2、求多個zset的交集

127.0.0.1:6379>zinterstore sheZset 2 myZset youZset  ----將myzset和youZset 的交集添加到sheZset中。

小結

如果你在看到本文後有什麼疑問,請加入博客左上角羣,一起交流學習。

我的redis系列博文:雙擊地址

發佈了313 篇原創文章 · 獲贊 49 · 訪問量 87萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章