当前位置: 首页 > news >正文

Redis——常用数据类型Zset

目录

      • Zset 有序集合
        • 普通命令
          • zadd
          • zcard
          • zcount
          • zrange
          • zrevrange
          • zrangebyscore
          • zpopmax
          • bzpopmax
          • zpopmin
          • bzpopmin
          • zrank
          • zrevrank
          • zscore
          • zrem
          • zremrangebyrank
          • zremrangebyscore
          • zincrby
        • 集合间操作
          • zinterstore
          • zunionstore
        • Zset的编码方式
        • Zset的应用场景

Zset 有序集合

有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利用有序集合,可以帮助我们在实际开发中解决很多问题。

数据结构是否允许重复元素是否有序有序依据应用场景
列表索引下标时间轴、消息队列等
集合标签、社交等
有序集合分数排行榜系统、社交 等

这里列表的有序和有序集合的有序不是一个有序,list的有序代表的是这个顺序上的重要性,Zset代表升序降序的有序

普通命令
zadd
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member...]//时间复杂度:O(log(N))
//返回值:本次添加成功的元素个数。

添加或者更新指定的元素以及关联的分数到 zset 中,分数应该符合 double 类型,+inf/-inf 作为正负 极限也是合法的。

ZADD 的相关选项:

  • XX:仅仅用于更新已经存在的元素,不会添加新元素。
  • NX:仅用于添加新元素,不会更新已经存在的元素。
  • CH:默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更 新的元素的个数。
  • INCR:此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和 分数。
zcard
ZCARD key//获取zset 中的元素个数
//时间复杂度:O(1)
//返回值:zset 内的元素个数
zcount
ZCOUNT key min max//返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的
//时间复杂度:O(log(N))
//返回值:满⾜条件的元素列表个数
zrange
ZRANGE key start stop [WITHSCORES]//返回指定区间⾥的元素,分数按照升序。带上 WITHSCORES 可以把分数也返回
//此处的 [start, stop] 为下标构成的区间. 从 0 开始, ⽀持负数
//时间复杂度:O(log(N)+M)
//返回值:区间内的元素列表
zrevrange
ZREVRANGE key start stop [WITHSCORES]//返回指定区间⾥的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回
//时间复杂度:O(log(N)+M)
//返回值:区间内的元素列表
zrangebyscore
ZRANGEBYSCORE key min max [WITHSCORES]//返回分数在 min 和 max 之间的元素,默认情况下,min 和 max 都是包含的
//时间复杂度:O(log(N)+M)
//返回值:区间内的元素列表
zpopmax
 ZPOPMAX key [count]//删除并返回分数最⾼的 count 个元素
//时间复杂度:O(log(N) * M)
//返回值:分数和元素列表
bzpopmax
BZPOPMAX key [key ...] timeout//ZPOPMAX 的阻塞版本
//时间复杂度:O(log(N))
//返回值:元素列表
zpopmin
ZPOPMIN key [count]//删除并返回分数最低的 count 个元素
//时间复杂度:O(log(N) * M)
//返回值:分数和元素列表
bzpopmin
BZPOPMIN key [key ...] timeout//ZPOPMIN 的阻塞版本
//时间复杂度:O(log(N))
//返回值:元素列表
zrank
ZRANK key member//返回指定元素的排名,升序
//时间复杂度:O(log(N))
//返回值:排名
zrevrank
ZREVRANK key member//返回指定元素的排名,降序
//时间复杂度:O(log(N))
//返回值:排名
zscore
ZSCORE key member//返回指定元素的分数
//时间复杂度:O(1)
//返回值:分数
zrem
ZREM key member [member ...]//删除指定的元素
//时间复杂度:O(M*log(N))
//返回值:本次操作删除的元素个数
zremrangebyrank
ZREMRANGEBYRANK key start stop//按照排序,升序删除指定范围的元素,左闭右闭
//时间复杂度:O(log(N)+M)
//返回值:本次操作删除的元素个数
zremrangebyscore
ZREMRANGEBYSCORE key min max//按照分数删除指定范围的元素,左闭右闭
//时间复杂度:O(log(N)+M)
//返回值:本次操作删除的元素个数
zincrby
ZINCRBY key increment member//为指定的元素的关联分数添加指定的分数值
//时间复杂度:O(log(N))
//返回值:增加后元素的分数
集合间操作

有序集合的交集操作

zinterstore
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight
[weight ...]] [AGGREGATE <SUM | MIN | MAX>]//求出给定有序集合中元素的交集并保存进⽬标有序集合中,在合并过程中以元素为单位进行合并,
//元素对应的分数按照不同的聚合⽅式和权重得到新的分数//时间复杂度:O(N*K)+O(M*log(M)) N 是输⼊的有序集合中, 最⼩的有序集合的元素个数; K 是输⼊了
//⼏个有序集合; M 是最终结果的有序集合的元素个数.
//返回值:⽬标集合中的元素个数

有序集合的并集操作

zunionstore
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight[weight ...]] [AGGREGATE <SUM | MIN | MAX>]//求出给定有序集合中元素的并集并保存进⽬标有序集合中,在合并过程中以元素为单位进行合并,
//元素对应的分数按照不同的聚合⽅式和权重得到新的分数//时间复杂度:O(N)+O(M*log(M)) N 是输⼊的有序集合总的元素个数; M 是最终结果的有序集合的元素个数.
//返回值:⽬标集合中的元素个数
Zset的编码方式
  • ziplist(压缩列表):当有序集合的元素个数小于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都小于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会用 ziplist 来作为有序集合的内部实现,ziplist 可以有效减少内存的使用
  • skiplist(跳表):当 ziplist 条件不满足时,有序集合会使用 skiplist 作为内部实现,因为此时 ziplist 的操作效率会下降。”
  1. 当元素个数较少且每个元素较小时,内部编码为 ziplist
  2. 当元素个数超过 128 个,内部编码 skiplist
  3. 当某个元素大于 64 字节时,内部编码 skiplist
Zset的应用场景

有序集合比较典型的使用场景就是排行榜系统

  1. 添加用户赞数
  2. 取消用户赞数
  3. 展示获取赞数最多的 10 个用户
  4. 展示用户信息以及用户分数

http://www.mrgr.cn/news/26828.html

相关文章:

  • yjs03——matplotlib的介绍与使用(一个图里面画折线)
  • Java:处理crontab定时任务的最简单方法
  • ComfyUI中用wget下载、安装节点
  • PMP--一模--解题--51-60
  • css scrollbar-width: none 隐藏默认滚动条
  • 怎么将flv转换成mp4格式?这几种转换方法超多人在用!
  • 2024年03月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析
  • GMB外链是什么?
  • 性能诊断的方法(四):自下而上的资源诊断方法和发散的异常信息诊断方法
  • 【C#】自动升级工具
  • 局域网聊天工具:提升企业内部信息安全的私有化即时通讯软件
  • 【专题】2024新能源企业“出海”系列之驶向中东、东南亚报告合集PDF分享(附原数据表)
  • GPT-4-Turbo 和 Claude-3.5-Sonnet 图片识别出答题的是否正确 进行比较
  • 无线通信总结
  • GIS开发从0到1|MapboxGL可视化项目实战教程(含步骤说明和代码展示)3
  • 数据资产入表流程概述
  • 如何在算家云搭建TripoSR(三维重建)
  • 35岁嫌老,65嫌年轻,程序员还有路子吗?
  • 三丰云免费虚拟主机和免费云服务器评测
  • 【Kubernetes】linux centos安装部署Kubernetes集群