1. 程式人生 > >系統學習redis之七——redis數據類型之zset數據類型及操作

系統學習redis之七——redis數據類型之zset數據類型及操作

升序 順序 cores 修改 但是 增加 string類型 所有 ger

sourted sets數據類型介紹

sorted set是set的一個升級版本,他在set的基礎上增加了一個順序屬性。這一屬性在修改元素的時候可以指定,每次指定後,zset會自動按照新的值調整順序,是有序集合。可以理解為有兩列的MySQL表,一列存value,一列存順序。操作中key理解為zset的名字。

zset數據類型方法

  • zadd:向指定集合zset中添加元素member,score用於排序,如果該元素已經存在,則更新其順序
  • zrange:查看sourted sets裏面的所有元素
  • zrem:刪除名稱為key的zset中的元素member(即刪除指定zset裏面的指定元素)
  • zincrby:如果在某一個zset中已經存在元素member,則該元素的score增加increment。否則向該集合中添加該元素,其score的值就為指定的increment值
  • zrank:返回某一個zset中指定元素的索引值(不是插入的時候指定的那個順序值,是元素的下標)。這個索引值是按照元素的score值從小到大排列的,score值越小,索引值(下標)就越小,score值越大,索引值(下標)就越大
  • zrevrank:返回某一個zset中指定元素的索引值(不是插入的時候指定的那個順序值,是元素的下標)。這個索引值是按照元素的score值從大到小排列的,score值越小,索引值(下標)就越大,score值越大,索引值(下標)就越小
  • zrevrange:返回某一個zset集合中的指定區間的元素及其順序值,按照score值從大到小降序排列,與zrange相反
  • zrangebyscore:返回集合中指定順序值區間的元素
  • zcount:返回集合中指定順序值區間的元素總數量
  • zcard:返回集合中的所有元素個數
  • zremrangebyrank:刪除在集合中排名在給定索引值(下標)區間的元素(註意:是按照索引值刪除,這裏不是順序值)
  • zremrangebyscore:刪除在集合中排名在給定順序值區間的元素(註意:是按照順序值刪除,這裏不是索引值)

方法及操作

1)zadd:向指定集合zset中添加元素member,score用於排序,如果該元素已經存在,則更新其順序
例如:向sset1中添加one和two兩個元素並指定順序

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZADD sset1 1 one    #向sset1中添加元素“one”,並指定順序為1
(integer) 1                         #返回值為1,表示添加成功
127.0.0.1:6379> ZADD sset1 2 two    #向sset1中添加元素“two”,並指定順序為2
(integer) 1
127.0.0.1:6379> ZADD sset1 3 two    #向sset1中添加元素“two”,並指定順序為3
(integer) 0                     #集合中不能有重復元素,所以這裏返回的是0,表示重復添加元素“two”是失敗的,但是會刷新元素“two”的順序,將原來的2改成3
127.0.0.1:6379> ZRANGE sset1 0 -1   #查看sset裏面的所有元素,這裏的0和-1也是代表元素的下標。這裏是看不到設置的順序的,要看順序,就要加上WITHSCORES
1) "one"
2) "two"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES        #查看sset的所有元素機器對應的順序
1) "one"
2) "1"
3) "two"
4) "3"      #這裏就是第二次添加元素“two”的時候將順序從2改成了3
127.0.0.1:6379> 

備註,同《系統學習redis之三——redis數據類型之string類型及操作》一樣,後面的例子也都在同一臺機器一次性操作完畢的,因為後面的代碼如果不加上“ [root@test101 redis-4.0.1]# src/redis-cli ”這一句。代碼高亮也會格式有問題,所以後面所有的例子中都加上了“[root@test101 redis-4.0.1]# src/redis-cli ”,只是為了格式問題。

2)zrange:查看sourted sets裏面的所有元素
例如:上面例子中查看sset1中的全部元素

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset1 0 -1   
1) "one"
2) "two"

3)zrem:刪除名稱為key的zset中的元素member(即刪除指定zset裏面的指定元素)
例如:刪除sset1中的元素one

[root@test101 redis-4.0.1]# src/redis-cli 
user127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES   #查看當前sset1裏面的全部元素
1) "one"
2) "1"
3) "two"
4) "3"
127.0.0.1:6379> ZREM sset1 one   #刪除sset1的元素“one”
(integer) 1
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES    #再查看sset1的元素,one已經被刪除成功
1) "two"
2) "3"
127.0.0.1:6379> 

4)zincrby:如果在某一個zset中已經存在元素member,則該元素的score增加increment。否則向該集合中添加該元素,其score的值就為指定的increment值
例如:給sset1的某個元素增加順序值

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES  #當前sset1中只有一個元素“two”,順序為3
1) "two"
2) "3"
127.0.0.1:6379> ZINCRBY sset1 2 two     #給元素“two”的順序加上2
"5"     #返回的就是元素“two”的順序被增加之後的值
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES            #再查看sset1的值,two的順序已經變成了5
1) "two"
2) "5"
127.0.0.1:6379> ZINCRBY sset1 -1 two        #當值變成負值,順序值就會減小
"4"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES
1) "two"
2) "4"
127.0.0.1:6379> ZINCRBY sset1 2 one     #給sset1中的元素“one”增加元素值2.因為sset1中不存在元素"one",所以這裏會插入元素“one”,並設置期順序值為2
"2"
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES    #查看當前sset1的所有元素
1) "one"
2) "2"
3) "two"
4) "4"
127.0.0.1:6379> 

5)zrank:返回某一個zset中指定元素的索引值(不是插入的時候指定的那個順序值,是元素的下標)。這個索引值是按照元素的score值從小到大排列的,score值越小,索引值(下標)就越小,score值越大,索引值(下標)就越大
例如:查看sset2中元素“two”的索引值

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
3) "two"    #插入two,設置的順序值是2
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZRANK sset2 two  #返回元素“two”的索引值,即下標
(integer) 1     #這裏的1就是表示元素“two”的索引值(下標)。one的下標是0,two的下標就是1
127.0.0.1:6379> 

6)zrevrank:返回某一個zset中指定元素的索引值(不是插入的時候指定的那個順序值,是元素的下標)。這個索引值是按照元素的score值從大到小排列的,score值越小,索引值(下標)就越大,score值越大,索引值(下標)就越小
例如:用zrevrank查看sset2中各元素的下標值

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZREVRANK sset2 one  #元素“one”的score值最小,索引值最大
(integer) 2
127.0.0.1:6379> ZREVRANK sset2 two
(integer) 1
127.0.0.1:6379> ZREVRANK sset2 three  #元素“three”的score值最大,索引值最小
(integer) 0
127.0.0.1:6379> 

7)zrevrange:返回某一個zset集合中的指定區間的元素及其順序值,按照score值從大到小降序排列,與zrange相反
例如:使用zrevrange返回sset2中所有的元素及其順序值

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #先用zrange查看sset2中的元素及其順序值,是按照從小到大升序排列的
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> 
127.0.0.1:6379> ZREVRANGE sset2 0 -1 WITHSCORES  #先用zrevrang查看sset2中的元素及其順序值,是按照從大到小降序排列的
1) "three"
2) "3"
3) "two"
4) "2"
5) "one"
6) "1"

8)zrangebyscore:返回集合中指定順序值區間的元素
例如:返回sset2中指定順序值區間的元素

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #查看sset2中所有元素及其順序值
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZRANGEBYSCORE sset2 1 2 WITHSCORES   #查看sset2中順序值為1到2的元素
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379> ZRANGEBYSCORE sset2 2 3 WITHSCORES   #查看sset2中順序值為2到3的元素
1) "two"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379> 
127.0.0.1:6379> ZRANGEBYSCORE sset2 1 3 WITHSCORES    #查看sset2中順序值為1到3的元素
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379>

9)zcount:返回集合中指定順序值區間的元素總數量
例如:返回sset2中指定順序值區間的元素數量

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES        查看sset2中所有元素及其順序值
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZCOUNT sset2 1 2    #查看sset2中順序值從1到2的元素個數
(integer) 2         #這裏的2就代表的元素個數
127.0.0.1:6379> ZCOUNT sset2 2 3  #查看sset2中順序值從2到3的元素個數
(integer) 2
127.0.0.1:6379> ZCOUNT sset2 1 3   #查看sset2中順序值從1到3的元素個數
(integer) 3
127.0.0.1:6379> 

10)zcard:返回集合中的所有元素個數
例如:查看sset2中所有元素個數

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1       #查看sset2中所有元素,總共3個
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZCARD sset2     #使用zcard返回sset2中元素總數
(integer) 3         #這裏的3就表示元素總數量
127.0.0.1:6379>

11)zremrangebyrank:刪除在集合中排名在給定索引值(下標)區間的元素(註意:是按照索引值刪除,這裏不是順序值)
例如:刪除sset2中是定索引區間的元素

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    #當前sset2中所有元素
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "five"
10) "5"
127.0.0.1:6379> ZREMRANGEBYRANK sset2 3 4    #刪除索引值從3到4這個區間的元素
(integer) 2       #2表示刪除元素的個數
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES     #索引值從0開始,元素“four”的索引值是3,元素“five”的索引值是4,都給刪除了
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> ZREMRANGEBYRANK sset2 1 1   #索引區間的開始值和結束值可以是一樣的,就只刪除1個元素
(integer) 1
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    #索引值為1的元素“two”給刪除了
1) "one"
2) "1"
3) "three"
4) "3"
127.0.0.1:6379> 

12)zremrangebyscore:刪除在集合中排名在給定順序值區間的元素(註意:是按照順序值刪除,這裏不是索引值)
例如:刪除sset2中是定順序區間的元素

[root@test101 redis-4.0.1]# src/redis-cli 
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #當前sset2中所有元素
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "five"
10) "5"
127.0.0.1:6379> ZREMRANGEBYSCORE sset2 2 4  #順序值從1開始,元素“two”的索引值是2,元素“four”的索引值是4,都給刪除了
(integer) 3
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    
1) "one"
2) "1"
3) "five"
4) "5"
127.0.0.1:6379> ZREMRANGEBYSCORE sset2 5 5  #順序區間的開始值和結束值可以是一樣的,就只刪除1個元素
(integer) 1
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
1) "one"
2) "1"
127.0.0.1:6379> 

系統學習redis之七——redis數據類型之zset數據類型及操作