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