Redis数据类型-ZSet

一. 概述
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

  1. "mysql"
  2. "mongodb"
  3. "oracle"
  4. "redis"

#查询所有元素带分数
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#查询指定下标范围内的元素
192.168.65.15:6379> zrange db 2 3

  1. "oracle"
  2. "redis"

#查询指定下标范围内的元素,带分数
192.168.65.15:6379> zrange db 2 3 withscores

  1. "oracle"
  2. "10"
  3. "redis"
  4. "25"
    zrevrange
    返回指定下标范围倒序的值,start 下标从0开始,查询所有范围是0到-1。

#查询所有
192.168.65.15:6379> zrevrange db 0 -1

  1. "redis"
  2. "oracle"
  3. "mongodb"
  4. "mysql"

#查询所有元素,带分数
192.168.65.15:6379> zrevrange db 0 -1 withscores

  1. "redis"
  2. "25"
  3. "oracle"
  4. "10"
  5. "mongodb"
  6. "7"
  7. "mysql"
  8. "5"

#查询指定下标范围内的元素值
192.168.65.15:6379> zrevrange db 2 3

  1. "mongodb"
  2. "mysql"
    zrangebyscore
    返回指定分数区间元素的信息,可以返回分数,可以进行分页 limit offset count,offset指的是元素的下标从0开始,count指返回的元素个数,按正序返回。

#正序返回分数在0到30之间的元素信息
192.168.65.15:6379> zrangebyscore db 0 30 withscores

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#正序返回分数在0到30之间的元素信息,并分页,如果是0 -1 表示所有
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 -1

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#正序返回分数在0到30之间的元素信息,并分页,下标从0开始,元素个数是1
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 0 1

  1. "mysql"
  2. "5"

#正序返回分数在0到30之间的元素信息,并分页,下标从2开始,元素个数是2
192.168.65.15:6379> zrangebyscore db 0 30 withscores limit 2 2

  1. "oracle"
  2. "10"
  3. "redis"
  4. "25"
    zrevrangebyscore
    与zrangebyscore相比,不同是倒序 。

#返回倒序分数30-0的所有元素
192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 0 -1

  1. "redis"
  2. "25"
  3. "oracle"
  4. "10"
  5. "mongodb"
  6. "7"
  7. "mysql"
  8. "5"

#返回倒序分数30-0,进行分页,下标从2开始,取2条
192.168.65.15:6379> zrevrangebyscore db 30 0 withscores limit 2 2

  1. "mongodb"
  2. "7"
  3. "mysql"
  4. "5"
    zrank zrevrank
    zrank可以返回元素的正序名次,名次从0开始,第1名返回0。zrevrank可以返回元素的倒序名次,名次也是从0开始,第1名返回0。

#查看正序排名
192.168.65.15:6379> zrange db 0 -1

  1. "mysql"
  2. "mongodb"
  3. "oracle"
  4. "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

  1. "mysql"
  2. "5"
  3. "mongodb"
  4. "7"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "25"

#元素mysql的分数+3
192.168.65.15:6379> zincrby db 3 mysql
"8"

#重新查看排名
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "mongodb"
  2. "7"
  3. "mysql"
  4. "8"
  5. "oracle"
  6. "10"
  7. "redis"
  8. "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

  1. "mongodb"
  2. "oracle"
  3. "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

  1. "oracle"
  2. "10"
  3. "redis"
  4. "25"

#按分数区间删除
192.168.65.15:6379> zremrangebyscore db 10 20
(integer) 1

#查询,已删除
192.168.65.15:6379> zrange db 0 -1 withscores

  1. "redis"
  2. "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

  1. "hh"
  2. "0"
  3. "mm"
  4. "0"
  5. "qq"
  6. "0"
  7. "xx"
  8. "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

  1. "hh"
  2. "1000"
  3. "qq"
  4. "50"
  5. "xx"
  6. "30"
  7. "mm"
  8. "10"

#经调查违规拉票,取消资格
192.168.65.15:6379> zrem ranking hh
(integer) 1

#最后只取第一名
192.168.65.15:6379> zrevrange ranking 0 0 withscores

  1. "qq"
  2. "50"

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值