1. 程式人生 > 實用技巧 >redis:zset(賦值、取值、刪除、修改分數)

redis:zset(賦值、取值、刪除、修改分數)

1、概念

(1)基本概念

  • redis的有序集合與集合一樣也是String型別元素的集合,不允許有重複的元素
  • 每一個元素都會關聯一個double型別的分數,redis正是通過分數來為集合中的成員進行重大到小的排序
  • 有序集合中的成員是唯一的,但是分數可以重複
  • 集合是通過雜湊表實現的,集合中的最大元素是2的32次方減1。Zset是有序且不重複的

(2)應用

銷量排行、積分排行、成績排行,集合的value作為學號,成績作為分數,插入集合的時候就已經排好順序了

2、賦值

(1)賦值語法

127.0.0.1:6379> zadd z1 1 html 23 css 25 js 
(integer) 
3

向有序集合中新增一個或多個成員,或者更新已經存在的成員的分時

3、取值

(1)獲取有序集合的成員數量

127.0.0.1:6379> zcard z1
(integer) 3

(2)計算有序集合中指定區間分數的成員數

127.0.0.1:6379> zcount z1 1 23
(integer) 2

(3)返回有序集合指定成員的索引

127.0.0.1:6379> zrange z1 0 -1
1) "html"
2) "css"
3) "js"
127.0.0.1:6379> zrank z1 js
(integer) 2
127.0.0.1:6379> zrank z1 html
(integer) 
0

(4)通過索引區間返回有序集合指定區間內的成員

127.0.0.1:6379> zrange z1 0 -1
1) "html"
2) "css"
3) "js"
127.0.0.1:6379> zrange z1 0 1
1) "html"
2) "css"
127.0.0.1:6379> zrevrange z1 0 -1
1) "js"
2) "css"
3) "html"
127.0.0.1:6379> zrange z1 0 -1
1) "html"
2) "css"
3) "js"
127.0.0.1:6379> 

zrevrange是通過索引,分數從高到低排列

(5)通過分數返回有序集合指定區間的成員

127.0.0.1:6379> zrangebyscore z1 0 23
1) "html"
2) "css"
127.0.0.1:6379> zrevrangebyscore z1 23 0
1) "css"
2) "html"
127.0.0.1:6379> zrangebyscore z1 0 23
1) "html"
2) "css"

(6)返回索引

127.0.0.1:6379> zrank z1 css
(integer) 1

4、刪除

(1)移除集合

127.0.0.1:6379> del z1
(integer) 1
127.0.0.1:6379> zrange z1 0 -1
(empty list or set)

(2)移除集合中的一個或多個成員

127.0.0.1:6379> zadd z1 1 html 23 css 25 js 
(integer) 3
127.0.0.1:6379> zrange z1 0 -1
1) "html"
2) "css"
3) "js"
127.0.0.1:6379> zrem z1 html css
(integer) 2
127.0.0.1:6379> zrange z1 0 -1
1) "js"

(3)移除有序集合中給定的排名區間的所有成員

127.0.0.1:6379>  zadd z1 1 html 23 css 25 js 
(integer) 3127.0.0.1:6379> zremrangebyrank z1 0 1
(integer) 2
127.0.0.1:6379> zrange z1 0 -1
1) "js"

(4)根據分數區間刪除

127.0.0.1:6379> zrange z1 0 -1
1) "html"
2) "css"
3) "js"
127.0.0.1:6379> zremrangebyscore z1 1 23
(integer) 2
127.0.0.1:6379> zrange z1 0 -1
1) "js"

5、增加分數

(1)增加元素的分組,返回值是更改後的分數:

127.0.0.1:6379> zrange z1 0 -1
1) "html"
2) "css"
3) "js"
127.0.0.1:6379> zincrby z1 100 html
"101"
127.0.0.1:6379> zrange z1 0 -1
1) "css"
2) "js"
3) "html"

6、zset應用案例

(1)插入學生的成績:

127.0.0.1:6379> zadd zhai 67 java 89 database 90 html 100 css 
(integer) 4

(2)查詢比較高的兩門功課

127.0.0.1:6379> zrevrange zhai 0 1
1) "css"
2) "html"

(3)查詢60-90的功課:

127.0.0.1:6379> zrangebyscore zhai 60 90
1) "java"
2) "database"
3) "html"