序言
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系列博文:雙擊地址