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