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

9.zset类型

zset有序集合;这里指的有序就是升序和降序;

zset相对于set引入了分数score,浮点类型,用于排序;

1.常用命令

1.1 zadd

zadd key [NX | XX] [GT | LT] [CH] [INCR] score member [...]

注意:member和score不能单纯地认为是键值对,因为键值对明确是用键去找值,而member和score两个都可以互相找对方;可以理解成是一个pair;

NX:不存在才创建;

XX:存在才更新;

GT:只有大于才更新,不影响新增;

LT:只有小于才更新,不影响新增;

CH:影响返回值,加了之后返回:新增+修改元素个数;原是只返回新增的元素个数;

INCR:类似incrby,给member加上一个score;

时间复杂度:O(logN),zset编码方式为跳表,结构决定;

细节:默认按照升序;score相同时,按照member字典序;

zset与set的区别:

1)zset使用跳表

2)zset支持修改key值(严格来说是member)
3)zset适合范围遍历(严格来说是跳表的特性)

1.2 zcard、zcount、zrange、zrevrange、zrangebyscore

zcard key 获取元素个数;

zcount key min max 获取score在区间[min, max]中的元素个数;

如果要排除边界值,可以加上(,例如:zcount key (3 (5 就是(3,5)

O(logN),只需要查找到min和max,两次logN,然后通过两个下标直接计算即可;

支持无穷大表示方式:-inf,+inf

zrange key start stop [withscores] 返回区间内元素,按顺序;
时间复杂度:O(logN+M),M为区间长度

zrevrange key start stop [withscores] 区间还是正的,返回结果逆序输出;

zrangebyscore key min max [withscores] 根据分数区间获取元素;

在redis 6.2或废弃,移动到zrange上;

1.3 zpopmax、zpopmin

zpopmax key [count] 删除并返回分数最高的count个元素(member+score)

时间复杂度:O(logN*M);logN查找最大值,M为删除元素的个数;

就这样看来,logN是可以优化的,记录尾即可,redis针对zset确实也记录了尾,但是这里没有这样实现;

1.4 bzpopmax、bzpopmin

bzpopmax key [...] timeout 从key中删除最大元素,时间单位为秒,支持小数

时间复杂度:O(logN)

1.5 zrank、zrevrank、zscore、zrem、zremrangebyrank、zincrby

zrank key member 根据元素获取下标;O(logN)

zrevrank key member 反着计算下标;O(logN)

zscore key member 根据元素获取分数;特别地,O(1)

zrem key member [...] 删除元素;O(logN*M)

zremrangebyrank key start stop 根据下标范围删除元素;O(logN+M)

zremrangebyscore key min max 根据分数范围删除元素;

zincrby key increment member 修改元素的分数;

1.6 交集、并集、差集

zinterstore destination numkeys key [...] [WEIGHT weight [...]] [AGGREGATE <SUM | MIN | MAX> ]

numkeys:后续是不定项选项,需要用numkeys来区分key和后面;

weight:权重,就是用原来的分数*weight

aggregate:如果交集相同元素的score不同,怎么取值;

时间复杂度:O(N*k)+O(M*logM),N是有序集合中元素个数最少的,k是求交集的有序集合数量;M是结果集的元素个数;

  • O(N*K) -> 只关心最短集合,对比时只需要遍历最短集合,取出元素在当前集合内查找即可,查找的时间复杂度是O(1)(注:skiplist+hash,hash用来判断member是否存在以及根据member获取分数
  • O(M*logM) -> aggregate可能会改变相对顺序,M*logM需要对结果集进行排序;

2.编码方式

元素少:ziplist 元素多:skiplist+hashtable;哈希表用来根据member获取分数,为了O(1)

3.应用场景

3.1 排行榜系统

3.2 多维排行榜

http://www.jsqmd.com/news/187548/

相关文章:

  • 基于电子电路出租车计价器仿真设计
  • 计算机毕业设计springboot绿色运动会管理系统 基于SpringBoot的低碳体育赛事智慧运营平台 SpringBoot驱动的可持续运动会综合服务平台
  • RTX 3090与4090性能对比测试:哪款更适合lora-scripts?
  • web前端如何集成lora-scripts训练结果展示页面?
  • 基于STM32单片机车牌识别系统摄像头图像处理设计的论文
  • 11.渐进式遍历、数据库命令
  • 计算机毕业设计springboot智慧社区门禁管理系统 基于SpringBoot的社区智能出入管控平台 SpringBoot驱动的居民安全通行一体化系统
  • 基于Matlab的语音识别系统设计
  • 12.自定义Redis客户端
  • 基于STM32闭环步进电机控制系统设计
  • 基于MSP430单片机手环老人跌倒GSM短信GPS北斗定位地图设计
  • 编译时报错如天书?,深度剖析C++元编程调试的隐秘陷阱与破解之道
  • lora-scripts训练日志分析:定位train.py运行异常根源
  • 基于单片机的智能扫地机器人
  • 基于STM32的红外测温系统设计
  • 揭秘DirectX与Vulkan下C++渲染质量调优秘籍:帧率与画质兼得的平衡之道
  • 计算机毕业设计springboot基于Java的智能公交车管理系统 基于SpringBoot的城市公交智慧调度与信息服务平台 Java+SpringBoot架构下的实时公交运营综合管理系统
  • lora-scripts在电商领域的应用场景探索:商品图智能生成
  • C++物理引擎中连续碰撞检测的陷阱与解决方案,90%的开发者都忽略了第5点
  • configs/lora_default.yaml模板深度解读:每个字段含义解析
  • 计算机毕业设计springboot家乡特色推荐系统 基于SpringBoot的地域文化特产智能推荐平台 SpringBoot框架下的地方风物分享与发现系统
  • logs/train.log日志文件结构分析:快速定位问题所在
  • 计算机毕业设计springboot学生公寓管理系统 高校宿舍智慧服务平台的设计与实现 基于SpringBoot的校园住宿一体化管理系统
  • 双十二年终促销:训练品牌专属折扣风格海报生成AI
  • 记一次 Windows 笔记本换主板后 PIN 失效
  • 使用lora-scripts进行方言语音识别模型微调的可能性探讨
  • GitHub镜像网站加速访问lora-scripts源码仓库方法
  • output_dir目录结构设计:便于管理和回溯多个LoRA版本
  • 本地机器vs云端训练:lora-scripts适用场景权衡
  • 【高精度物理模拟必修课】:从浮点误差到时间步长控制的完整精度优化指南