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"