合肥网站建设晨飞糟糕的网站设计
一. 概述
 SortedSet又叫zset,它是Redis提供的特殊数据类型,是一种特殊的set类型,继承了set不可重复的特点,并在set基础上为每个值添加一个分数,用来实现值的有序排列。

二. 常用指令
 明白它的特点后,接下来,操作一下此数据类型的常用的相关指令。
 zadd

将一个或者多个元素及其对应的分数添加到集合中。下面用命令来演示例子:

#新增
 192.168.65.15:6379> zadd db 10 oracle 5 mysql 25 redis 7 mongodb
#返回新增的个数
 (integer) 4
 zcard
 返回元素的个数,如果key不存在,则返回0。

192.168.65.15:6379> zcard db
 (integer) 4
 zcount
 返回 分数在 区间之间的个数。

#返回分数score 在 1-3之间的元素个数
 192.168.65.15:6379> zcount db 10 20
 (integer) 1
 zrange
 返回指定下标范围内正序排列的值,start 下标从0开始,查询所有范围是0到-1。

#查询所有元素范围用 0 -1
 192.168.65.15:6379> zrange db 0 -1
- "mysql"
 - "mongodb"
 - "oracle"
 - "redis"
 
#查询所有元素带分数
 192.168.65.15:6379> zrange db 0 -1 withscores
- "mysql"
 - "5"
 - "mongodb"
 - "7"
 - "oracle"
 - "10"
 - "redis"
 - "25"
 
#查询指定下标范围内的元素
 192.168.65.15:6379> zrange db 2 3
- "oracle"
 - "redis"
 
#查询指定下标范围内的元素,带分数
 192.168.65.15:6379> zrange db 2 3 withscores
- "oracle"
 - "10"
 - "redis"
 - "25"
zrevrange
返回指定下标范围倒序的值,start 下标从0开始,查询所有范围是0到-1。
 
#查询所有
 192.168.65.15:6379> zrevrange db 0 -1
- "redis"
 - "oracle"
 - "mongodb"
 - "mysql"
 
#查询所有元素,带分数
 192.168.65.15:6379> zrevrange db 0 -1 withscores
- "redis"
 - "25"
 - "oracle"
 - "10"
 - "mongodb"
 - "7"
 - "mysql"
 - "5"
 
#查询指定下标范围内的元素值
 192.168.65.15:6379> zrevrange db 2 3
- "mongodb"
 - "mysql"
zrangebyscore
返回指定分数区间元素的信息,可以返回分数,可以进行分页 limit offset count,offset指的是元素的下标从0开始,count指返回的元素个数,按正序返回。
 
#正序返回分数在0到30之间的元素信息
 192.168.65.15:6379> zrangebyscore db 0 30 withscores
- "mysql"
 - "5"
 - "mongodb"
 - "7"
 - "oracle"
 - "10"
 - "redis"
 - "25"
 
#正序返回分数在0到30之间的元素信息,并分页,如果是0 -1 表示所有
 192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 -1
- "mysql"
 - "5"
 - "mongodb"
 - "7"
 - "oracle"
 - "10"
 - "redis"
 - "25"
 
#正序返回分数在0到30之间的元素信息,并分页,下标从0开始,元素个数是1
 192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 1
- "mysql"
 - "5"
 
#正序返回分数在0到30之间的元素信息,并分页,下标从2开始,元素个数是2
 192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 2 2
- "oracle"
 - "10"
 - "redis"
 - "25"
zrevrangebyscore
与zrangebyscore相比,不同是倒序 。
 
#返回倒序分数30-0的所有元素
 192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 0 -1
- "redis"
 - "25"
 - "oracle"
 - "10"
 - "mongodb"
 - "7"
 - "mysql"
 - "5"
 
#返回倒序分数30-0,进行分页,下标从2开始,取2条
 192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 2 2
- "mongodb"
 - "7"
 - "mysql"
 - "5"
zrank zrevrank
zrank可以返回元素的正序名次,名次从0开始,第1名返回0。zrevrank可以返回元素的倒序名次,名次也是从0开始,第1名返回0。
 
#查看正序排名
 192.168.65.15:6379> zrange db 0 -1
- "mysql"
 - "mongodb"
 - "oracle"
 - "redis"
 
#redis排名下标为3,那就是第4名
 192.168.65.15:6379> db redis
 (integer) 3
#redis排名倒序下标为0,那就是第1名
 192.168.65.15:6379> zrevrank db redis
 (integer) 0
 zincrby zscore
 zincrby增加指定元素的分数,zscore查询指定元素的分数

#查询一波数据
 192.168.65.15:6379> zrange db 0 -1 withscores
- "mysql"
 - "5"
 - "mongodb"
 - "7"
 - "oracle"
 - "10"
 - "redis"
 - "25"
 
#元素mysql的分数+3
 192.168.65.15:6379> zincrby db 3 mysql
 "8"
#重新查看排名
 192.168.65.15:6379> zrange db 0 -1 withscores
- "mongodb"
 - "7"
 - "mysql"
 - "8"
 - "oracle"
 - "10"
 - "redis"
 - "25"
 
#单独查询mysql的分数
 192.168.65.15:6379> zscore db mysql
 "8"
 zrem
 返回删除成功元素个数。

#删除mysql元素
 192.168.65.15:6379> zrem db mysql
 (integer) 1
#查询一下
 192.168.65.15:6379> zrange db 0 -1
- "mongodb"
 - "oracle"
 - "redis"
zremrangebyrank zremrangebyscore
zremrangebyrank按排名次删除,start从0开始。
zremrangebyscore按分数区间删除。
 
#删除0下标的元素
 192.168.65.15:6379> zremrangebyrank db 0 0
 (integer) 1
#查询,已删除
 192.168.65.15:6379> zrange db 0 -1 withscores
- "oracle"
 - "10"
 - "redis"
 - "25"
 
#按分数区间删除
 192.168.65.15:6379> zremrangebyscore db 10 20
 (integer) 1
#查询,已删除
 192.168.65.15:6379> zrange db 0 -1 withscores
- "redis"
 - "25"
四. 应用场景
只要涉及到排名、投票等场景都可以用zset。
 
举一个例子,我们经常在微信上给邻居小朋友投票。
 #初始:明明mm 0票, 花花0票 乔乔qq 0票 小小 0票
 192.168.65.15:6379> zadd ranking 0 mm 0 hh 0 qq 0 xx
 (integer) 4
#查询一下初始值
 192.168.65.15:6379> zrange ranking 0 -1 withscores
- "hh"
 - "0"
 - "mm"
 - "0"
 - "qq"
 - "0"
 - "xx"
 - "0"
 
#明明拉来10票
 192.168.65.15:6379> zincrby ranking 10 mm
 "10"
#花花拉来1000票
 192.168.65.15:6379> zincrby ranking 1000 hh
 "1000"
#乔乔拉来50票
 192.168.65.15:6379> zincrby ranking 50 qq
 "50"
#小小拉来30票
 192.168.65.15:6379> zincrby ranking 30 xx
#最终排名:花花1000 乔乔50 小小 30 明明 10票
 192.168.65.15:6379> zrevrange ranking 0 -1 withscores
- "hh"
 - "1000"
 - "qq"
 - "50"
 - "xx"
 - "30"
 - "mm"
 - "10"
 
#经调查违规拉票,取消资格
 192.168.65.15:6379> zrem ranking hh
 (integer) 1
#最后只取第一名
 192.168.65.15:6379> zrevrange ranking 0 0 withscores
- "qq"
 - "50"
 

