「进击Redis」八、Redis Sorted Set运用场景、API解析

34 篇文章 5 订阅

前言

Redis 五种基础数据的最后一个了,本想着把 Set 和 Sorted Set 合并成一个来整,但是这样的话整个篇幅又会很长,看我这一篇的篇幅就知道了。又不想好哥哥们看的累(看我多贴心,愣着干嘛,点赞加关注呀)。
这篇完了之后下一篇还是有关于键命令(剧透)的,好哥哥们坚持坚持。下个阶段的话就是像 BitMap、HyperLogLog、Pipeline 等相对于来讲比较高级的功能了,敬请期待吧。
期待

概述

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储 40 多亿个成员,新学的 Markdown 次方)。如图
在这里插入图片描述

List、Set、Sorted Set 对比

对比

1 命令

1.1 集合内操作

1.1.1 添加成员
 ## 添加成员
 zadd key score member [score member ...]
 ## 向有序集合user:rankings添加用户test和他的分数100
 zadd user:rankings 100 test
1.1.2 统计成员个数
 ## 格式
 zcard key
 ## 统计user:rankings成员个数
 zadd user:rankings 100 test
1.1.3 获取某个成员的分数
 ## 格式
 zscore key member
 ## 获取test分数
 zscore user:rankings test
1.1.4 统计成员的排名
 ## zrank是从分数从低到高返回排名(排名从0开始计算)
 zrank key member
 ## zrevrank是从分数从高到低返回排名(排名从0开始计算)
 zrevrank key member
 ## 从高到低获取返回1
 zrank user:rankings test
 ## 从低到高获取返回0
 zrevrank user:rankings test
1.1.5 删除成员
 ## 格式,支持多个成员
 zrem key member [member ...]
 ## 删除user:ranking中的test
 zrem user:rankings test
1.1.6 增加成员的分数
 ## 格式,increment 需要增加的分数
 zincrby key increment member
 ## 给test添加10
 zincrby user:rankings 10 test
1.1.7 回指定排名范围的成员
 ## 格式,按照分值排名的,zrange是从低到高返回
 zrange key start end [withscores]
 ## 格式,按照分值排名的,zrevrange是从高到低返回
 zrevrange key start end [withscores]
 ## 返回整个有序集成员
 zrange user:rankings 0 -1 withscores
 ## 返回有序集下标区间 1 至 2 的成员和分数
 zrange user:rankings 1 2 withscores
1.1.8 返回指定分数范围的成员
 ## 格式,zrangebyscore按照分数从低到高返回
 zrangebyscore key min max [withscores] [limit offset count]
 ## 格式,zrevrangebyscore 按照分数从高到低返回
 zrevrangebyscore key max min [withscores] [limit offset count]
 ## 从低到高返回100到200的成员
 zrangebyscore user:rankings 100 200 withscores
1.1.9 获取指定分数范围成员个数
 ## 格式
 zcount key min max
 ## 格式,zrevrangebyscore 按照分数从高到低返回
 zcount user:rankings 100 200
1.1.10 删除指定排名内的升序元素
 ## 格式
 zremrangebyrank key start end
 ## 删除第0到第2名的元素
 zremrangebyrank user:rankings 0 2
1.1.11 删除指定分数范围的成员
 ## 格式
 zremrangebyscore key min max
 ## 删除100到200分的成员
 zremrangebyscore user:rankings 100 200

1.2 集合间操作

这个的话就不敲范例了,偷个懒(手动狗头保命),基本就是取交集、并集。

1.2.1 交集
 ## 格式,交集
 ## destination: 交集计算结果保存到这个键。
 ## numkeys: 需要做交集计算键的个数。
 ## key[key...]: 需要做交集计算的键。
 ## weights weight[weight...]: 每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1。
 ## aggregate sum|min|max: 计算成员交集后,分值可以按照sum(和)、
 ## min(最小值)、max(最大值)做汇总,默认值是sum
 zinterstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]  
1.2.2 并集
 ## 格式,参数于交集的一致
 zunionstore destination numkeys key [key ...] [weights weight [weight ...]] [aggregate sum|min|max]

2 时间复杂度

看图不说话。
z set

3 使用场景

  1. 标签:比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。
  2. 共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。
  3. 统计网站的独立 IP。利用 set 集合当中元素不唯一性,可以快速实时统计访问网站的独立 IP。
  4. 统计用户的点赞/取消点赞
  5. 排行榜功能,比如展示获取赞数最多的十个用户

本期就到这啦,有不对的地方欢迎好哥哥们评论区留言,另外 求 关 注 、 求 点 赞 \color{#FF0000}{求关注、求点赞}

下一篇:Redis 全局键管理解析
上一篇:Redis Set 运用场景、API 解析

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值