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

zset 中特殊的操作

首先 zset 与我们常规的 redis 操作有所不同, 这里的时间复杂度基本都是 O(log N) 起步的

目录

1. zcount 

2. zpopmax


1. zcount 

zcount key min max : 这里求的是 key 中下标在 min 和 max 之间的 元素的数量, 这里是比区间

我们要是想排除端点, 就需要加上 ( , 无论是左端点还是右端点都是要加上 (

为什么要这样设计呢? 

是因为在开发的时候就已经这样设定了, 只能去蹲守这样的规则~~  后面要是想改过来, 是很难的, 这是因为兼容性的原因, 广泛使用的软件, 一旦在新的版本中, 引入和之前不兼容的特性, 成本是非常高的

时间复杂度 : O(log N)

zcount 指定 min 和 max 分数区间的 ~~

先根据 min 找到对应的元素, 在根据 max 找到对应的元素 (log (N))

在上面找到一个的情况下, 如果进行一个遍历, 是不是就知道这里元素的个数了呢? 如果区间中的元素比较多, 此时要进行遍历, 复杂度就成了 O(log (N) + M), M市区件中元素的个数, N 使整个有序集合的元素个数 (错误的方法)

实际上, zset 内部会记录每个元素当前的 "排行" / "次序", 查询到两个元素, 直接就知道了元素所在的 "次序", 就可以直接把 max 对应的元素次序和 min 对应的元素次序, 减法即可

min 和 max 是可以写成浮点数(zset分数本身就是浮点数)

在浮点数中,存在两个特殊的数值: 

        inf : 无穷大

        -inf : 负无穷大 (不是无穷小)

2. zpopmax

zpopmax key count : 对 key 进行尾删 count 个

如果存在多个元素, 分数相同, 同时为最大值, zpopmax删的时候, 仍然只删除其中一个元素 (字典排序)

时间复杂度 : (log (N) * M) , M : 要删除的元素个数

既然是尾删, 为什么我们不把这个最后一个元素的位置特殊记录下来, 后续山粗不就可以 O(1) 了吗? 省去了查找的过程.

但是很遗憾, 目前 redis 并没有这么做, 事实上, redis 的源码中, 针对有序集合, 确实是记录了尾部这样特定的位置~~, 但是在实际删除的时候, 并没有用上这个特性, 而是直接调用了一个 "通用的删除函数" (给定一个 member 的值, 进行查找找到位置之后再删除~~) (这里应该是可以进行优化的)

http://www.lryc.cn/news/608346.html

相关文章:

  • nodejs读写文件
  • 【redis】基于工业界技术分享的内容总结
  • C++ 模板初阶
  • 阿里云:Ubuntu系统部署宝塔
  • 回归预测 | Matlab实现CNN-LSTM-self-Attention多变量回归预测
  • ventoy 是一个非常棒的开源工具,可以制作多系统的usb启动盘
  • 基于落霞归雁思维框架的软件需求管理实践指南
  • Vulnhub ELECTRICAL靶机复现(附提权)
  • 计算机技术与软件专业技术资格(水平)考试简介
  • Dispersive Loss:为生成模型引入表示学习 | 如何分析kaiming新提出的dispersive loss,对扩散模型和aigc会带来什么影响?
  • 《React+TypeScript实战:前端状态管理的安全架构与性能优化深解》
  • 【Unity3D实例-功能-移动】小兵移动-通过鼠标点击进行
  • 咨询进阶——解读57页企业发展战略咨询常用工具【附全文阅读】
  • Java Optional 类教程详解
  • C++ vector底层实现与迭代器失效问题
  • 【智能体cooragent】新智能体创建相关代码解析
  • Node.js 操作 MongoDB
  • Linux系统编程Day3-- Linux常用操作(终)
  • 2025-08 安卓开发面试拷打记录(面试题)
  • 3 使用 Jenkins 构建镜像:将你的应用打包成镜像
  • K8S部署ELK(三):部署Elasticsearch搜索引擎
  • 【机器学习】非线性分类算法(上):KNN(基于距离相似度)与朴素(特征独立)贝叶斯(基于概率统计)
  • 排序算法-堆排序
  • SQL 四大语言分类详解:DDL、DML、DCL、DQL
  • 分布在内侧内嗅皮层的层Ⅱ或层Ⅲ的头部方向细胞(head direction cells)对NLP中的深层语义分析的积极影响和启示
  • 智能制造——解读CMMM评估手册【附全文阅读】
  • MyBatis 批量操作 XML 实现方式
  • 信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
  • 元宇宙重构未来交通新图景
  • linux source命令使用详细介绍