set跟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中。