Redis入門之基本數據類型zSet

ZSet 有序集合

列表List 與有序集合的相同點與差別

1、二者都是有序的
2、二者都可以獲得某一範圍的元素
差別
1、列表是通過鏈表實現的,所以獲取靠近兩端的數據速度快,而元素增多後,訪問中間的數據的速度就會較慢。
2、有序集合使用散列表和跳躍表(skip list)實現的,所以即使讀取位於中間的部分的數據速度也很快。(時間複雜度爲O(log(N)))
3、列表中不能簡單地調整某一個元素的位置,但是有序集合可以
4、有序集合要比列表更耗費內存

ZADD 增加數據

ZADD key score member [score member score member …]
ZADD 用來向有序集合中加入一個元素和該該元素的分數,如果該元素已經存在則更新分數。ZADD 的返回值是新加入到集中中的元素個數(不包含原有的元素個數,只是新增加的)

127.0.0.1:6379[5]> ZADD aa 11 zhangsan 12 lisi 13 wangwu
(integer) 3
127.0.0.1:6379[5]> ZRANGE aa 0 -1 
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379[5]> ZSCORE aa zhangsan
"11"
127.0.0.1:6379[5]> ZADD aa 16 zhangsan
(integer) 0
127.0.0.1:6379[5]> ZSCORE aa zhangsan
"16"
127.0.0.1:6379[5]> 

ZSCORE 獲取元素的分數

ZSCORE key member

ZRANGE 和 獲取集合中某個範圍的元素列表

ZRANGE key start stop [withscores]

  • ZRANGE 命令會按照元素分數 從小到大的順序返回索引從start 到 stop 之間所有的元素(包括首尾),負數表示從後往前查找. 如果命令加上withscores 表示也展示分數
127.0.0.1:6379[5]> ZADD aa 11 zhangsan 12 lisi 13 wangwu
(integer) 3
127.0.0.1:6379[5]> ZRANGE aa 0 -1 
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379[5]> ZADD aa 16 zhangsan
(integer) 0
127.0.0.1:6379[5]> ZSCORE aa zhangsan
"16"
127.0.0.1:6379[5]> ZRANGE aa 0 -1 withscores
1) "lisi"
2) "12"
3) "wangwu"
4) "13"
5) "zhangsan"
6) "16"

  • ZREVRANGE key start stop [withscores] 與ZRANGE 區別在於 按照元素的分數從大到小打印
127.0.0.1:6379[5]> ZREVRANGE aa 0 -1  withscores
1) "zhangsan"
2) "16"
3) "wangwu"
4) "13"
5) "lisi"
6) "12"

ZRANGEBYSCORE 獲取指定分數範圍內的元素

ZRANGEBYSCORE key min max [withscores] [LIMIT offset count]

  • 按照元素分數·從小到大的順序打印分數範圍爲 min 到max 的元素。命令帶上 withscores 就也打印出分數
127.0.0.1:6379[5]> ZREVRANGE aa 0 -1  withscores // 從大到小打印
1) "zhangsan"
2) "16"
3) "wangwu"
4) "13"
5) "lisi"
6) "12"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa 12 15 withscores  //指定分數範圍內,從小到大打印
1) "lisi"
2) "12"
3) "wangwu"
4) "13"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa 12 15 
1) "lisi"
2) "wangwu"
  • 如果不想包含端點值,可以在分數前加上 “(”
127.0.0.1:6379[5]> ZRANGEBYSCORE aa 12 16 withscores 
1) "lisi"
2) "12"
3) "wangwu"
4) "13"
5) "zhangsan"
6) "16"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa (12 (16 withscores 
1) "wangwu"
2) "13"

  • -inf 極小值 與 +inf 極大值
127.0.0.1:6379[5]> ZRANGEBYSCORE aa 12 +inf withscores 
1) "lisi"
2) "12"
3) "wangwu"
4) "13"
5) "zhangsan"
6) "16"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa -inf +inf withscores 
1) "lisi"
2) "12"
3) "wangwu"
4) "13"
5) "zhangsan"
6) "16"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa -inf 15 withscores 
1) "lisi"
2) "12"
3) "wangwu"
4) "13"

[LIMIT offset count] 表示在獲得元素的基礎上,向後偏移offset 位的數據,一共取count 個偏移數據

127.0.0.1:6379[5]> ZRANGEBYSCORE aa 11 13 withscores 
1) "xiaohong"
2) "11"
3) "lisi"
4) "12"
5) "wangwu"
6) "13"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa 11 13 withscores limit 1 2 
1) "lisi"
2) "12"
3) "wangwu"
4) "13"
127.0.0.1:6379[5]> ZRANGEBYSCORE aa 11 13 withscores limit 2 2  // 當偏移量後獲取的個數大於偏移後剩餘的個數,只打印剩餘的元素
1) "wangwu"
2) "13"

ZINCRBY 增加某一個元素的分數

ZINCRBY key increment member 返回值是更改後的分數,當increment 爲負數的時候就是減少

127.0.0.1:6379[5]> ZINCRBY aa 5 zhangsan  // 增加之前zhangsan 的分數爲 16
"21"
127.0.0.1:6379[5]> ZINCRBY aa -5 zhangsan 
"16"

ZCARD獲取集合中元素的數量

ZCARD key

127.0.0.1:6379[5]> ZRANGE aa 0 -1 withscores 
 1) "xiaohong"
 2) "11"
 3) "lisi"
 4) "12"
 5) "wangwu"
 6) "13"
 7) "xiaoming"
 8) "14"
 9) "xiaobai"
10) "15"
11) "zhangsan"
12) "16"

127.0.0.1:6379[5]> ZCARD aa 
(integer) 6

ZCOUNT 獲取指定分數範圍內的元素個數

ZCOUNT key min max

127.0.0.1:6379[5]> ZRANGE aa 0 -1 withscores 
 1) "xiaohong"
 2) "11"
 3) "lisi"
 4) "12"
 5) "wangwu"
 6) "13"
 7) "xiaoming"
 8) "14"
 9) "xiaobai"
10) "15"
11) "zhangsan"
12) "16"

127.0.0.1:6379[5]> ZCOUNT aa 11 15 
(integer) 5

ZREM 刪除集合中的一個或多個元素

ZREM key member [member member … ]

127.0.0.1:6379[5]> ZREM aa zhangsan 
(integer) 1
127.0.0.1:6379[5]> ZRANGE aa 0 -1 
1) "xiaohong"
2) "lisi"
3) "wangwu"
4) "xiaoming"
5) "xiaobai"

ZREMRANGEBYRANK 按照排名範圍刪除元素

ZREMRANGEBYRANK key start stop 從排名的 小到大刪除 ,返回值表示刪除的個數

127.0.0.1:6379[5]> ZRANGE aa 0 -1 
1) "xiaohong"
2) "lisi"
3) "wangwu"
4) "xiaoming"
5) "xiaobai"
127.0.0.1:6379[5]> ZREMRANGEBYRANK aa 0 1 
(integer) 2
127.0.0.1:6379[5]> ZRANGE aa 0 -1 
1) "wangwu"
2) "xiaoming"
3) "xiaobai"
127.0.0.1:6379[5]> 
 

ZREMRANGEBYSCORE 按照分數的範圍進行刪除

ZREMRANGEBYSCORE key min max 刪除指定分數範圍內的元素,返回值爲刪除的個數

127.0.0.1:6379[5]> ZREMRANGEBYSCORE aa 13 14 
(integer) 2
127.0.0.1:6379[5]> ZRANGE aa 0 -1 withscores 
1) "xiaobai"
2) "15"

ZRANK 獲取元素的正序排序名次 ZREVRANK獲取元素倒序排序名次

  • 名次從0 開始到 集合元素count -1
  • 倒着排序的時候,最大的元素分數 排序爲0
127.0.0.1:6379[5]> ZRANGE aa 0 -1 withscores 
 1) "zhangsan"
 2) "11"
 3) "lisi"
 4) "12"
 5) "wangwu"
 6) "14"
 7) "liming"
 8) "15"
 9) "xiaobai"
10) "15"
127.0.0.1:6379[5]> ZRANK aa zhangsan 
(integer) 0
127.0.0.1:6379[5]> ZRANK aa xiaoming
(nil)
127.0.0.1:6379[5]> ZRANK aa xiaobai 
(integer) 4
127.0.0.1:6379[5]> ZREVRANK aa xiaobai 
(integer) 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章