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"