news 2026/4/16 12:37:58

9.zset类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 多维排行榜

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:06:17

lora-scripts训练数据清洗技巧:提升最终生成质量

LoRA 训练中的数据清洗之道&#xff1a;如何用 lora-scripts 打造高质量生成模型 在如今人人都能训练 AI 模型的时代&#xff0c;一个关键问题逐渐浮出水面&#xff1a;为什么有些人只用了几十张图就能让 LoRA 学会独特的画风&#xff0c;而另一些人喂了上千张图却只能得到模糊…

作者头像 李华
网站建设 2026/4/15 17:17:27

output_dir目录结构设计:便于管理和回溯多个LoRA版本

output_dir目录结构设计&#xff1a;便于管理和回溯多个LoRA版本 在训练AI模型的日常中&#xff0c;我们常常会遇到这样的场景&#xff1a;昨天刚跑完一个风格迁移的LoRA实验&#xff0c;今天想尝试提高秩&#xff08;rank&#xff09;看看效果是否更细腻&#xff0c;结果一不小…

作者头像 李华
网站建设 2026/4/16 11:01:25

lora-scripts支持多类模型:全面适配Stable Diffusion与LLaMA 2

lora-scripts支持多类模型&#xff1a;全面适配Stable Diffusion与LLaMA 2 在生成式AI迅速普及的今天&#xff0c;一个现实问题摆在开发者面前&#xff1a;通用大模型虽然强大&#xff0c;但面对具体任务时常常“水土不服”——画风难以统一、语言风格不匹配、专业术语理解偏差…

作者头像 李华
网站建设 2026/4/16 11:15:22

C++内核性能优化十大误区:你是否正让编译器为你背锅?

第一章&#xff1a;C内核性能优化十大误区&#xff1a;你是否正让编译器为你背锅&#xff1f;在高性能计算与系统级编程中&#xff0c;C常被视为“性能之王”&#xff0c;但许多开发者在追求极致性能时&#xff0c;反而因误解优化机制而适得其反。最常见的情形是盲目假设编译器…

作者头像 李华
网站建设 2026/4/16 11:09:57

为什么你的C++物理引擎总出现穿透现象?揭秘碰撞精度丢失的7大根源

第一章&#xff1a;为什么你的C物理引擎总出现穿透现象&#xff1f;在开发基于C的实时物理模拟系统时&#xff0c;物体穿透&#xff08;Tunneling&#xff09;是一个常见却令人困扰的问题。这种现象通常发生在高速运动物体穿过障碍物而未被检测到碰撞时&#xff0c;导致物理世界…

作者头像 李华
网站建设 2026/4/16 10:39:17

十二生肖创意表达:lora-scripts生成兼具传统与现代审美的动物形象

十二生肖创意表达&#xff1a;LoRA-Scripts生成兼具传统与现代审美的动物形象 在AI艺术创作的浪潮中&#xff0c;一个有趣的现象正在发生&#xff1a;越来越多的设计师和文化工作者开始尝试用生成模型来“复活”那些沉睡于古籍与民俗中的视觉符号。比如十二生肖——这个几乎每个…

作者头像 李华