首先 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.pswp.cn/bicheng/91808.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91808.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91808.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KSP与ASM深度对比:原理、性能与使用场景

一、核心目的差异1. KSP(Kotlin Symbol Processing)核心目的:在编译时生成新代码,解决样板代码问题(操作对象:.kt源文件编译过程中的中间表示)主要场景:自动生成DI(依赖注入)配置代码创建路由映…

【LLM】如何在Cursor中调用Dify工作流

这篇文章将通过一个接口文档知识库示例,带你了解如何在 Cursor 中通过 Mcp Server 调用 Dify 平台配置的工作流。 1. 准备工作 需要准备文本生成模型、向量模型、Rerank 模型(可选),这些都可以在 阿里云百炼平台 申请免费使用额度…

L1、L2正则化的几何解释

L2正则化: 图中用几何方式形象地解释了 Ridge 回归(L2正则化)的原理。 ① 阴影圆:可以理解为(w1^2 w2^2)​≤R^2,圆周表示目标函数的约束线,这个圆表示了我们的参数 (w1,w2)可以活动的范围。 …

【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战

第1章 并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU给每个线程分配CPU时间片实现多线程,而每个时间片一般是几十毫秒,所以多个线程感觉是同时执行的 但同一个核切换线程执行时会保存运行状态,以便下次…

leecode3 无重复元素的最长子串

我的思路 原始代码 我发现我虽然解决问题了,但是我的思路不简洁,不明白。 这个题本质上还是滑动窗口的问题。 具体思路为先定义两个指针,对应滑动窗口的两个边界关键是:定义一个集合,来判断这个窗口中的元素是否存在重…

【嵌入式汇编基础】-ARM架构基础(三)

ARM架构基础(三) 文章目录 ARM架构基础(三) 7、AArch64 执行状态 7.3 程序计数器 7.4 堆栈指针 7.5 零寄存器 7.6 链接寄存器 7.7 帧指针 7.8 平台寄存器 (x18) 7.9 过程内调用寄存器 7.10 SIMD 和浮点寄存器 7.11 系统寄存器 7.13 PSTATE 7、AArch64 执行状态 7.3 程序计…

[buuctf-misc]喵喵喵

m题目在线评测BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#%E5%96%B5%E5%96%B5%E5%96%B5BUUCTF 是一个 CTF 竞赛和训练平台,为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.…

Vue 详情模块 2

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:详情基础内容,日期及电影描述 目录 详情 详情基础内容 初始化与赋值 渲染基础内容 详情样式 日期处理 安装moment 定义过滤器 使用过滤器 电影描述 总结 详情 详情基础内容 初始化与赋值 …

【MODIS数据】MYD03

🌍 遥感数据的“导航仪”:深入解析MYD03地理定位产品 在卫星遥感领域,精确的地理定位是数据应用的基础。作为Aqua卫星中分辨率成像光谱仪(MODIS)的核心支撑产品,MYD03虽不如地表温度或植被指数产品知名&am…

如何填写PDF表格的例子

实际应用场景中,我们会遇到需要根据会话内容自动填写表格的情况,比如:pdf 表格。假设根据会话内容已经获得相关信息,下面以填写个人信息为例来说明。个人信息表格.pdf填写后的效果:填写代码如下:from pdfrw…

2023年影响重大的网络安全典型案例

以下是2023年影响重大的网络安全典型案例,按时间顺序梳理事件经过及技术细节:---一、DeFi协议攻击:dForce借贷协议遭入侵(2023年4月)** - 时间线: - 4月19日08:58:黑客开始攻击Lendf.Me合约&…

Vue 响应式基础全解析2

DOM更新时机 修改响应式状态后,DOM更新不是同步的。Vue会缓冲所有修改,在"next tick"周期中统一更新,确保每个组件只更新一次。 如需在DOM更新后执行代码,可使用nextTick(): import {nextTick } from vueasync function increment() {count.value++

【黑马SpringCloud微服务开发与实战】(九)elasticsearch基础

1. 认识elasticsearch2. 认识和安装ES主播这里之前已经安装好了,资料包里面有镜像 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugin…

由浅入深地讲清楚浏览器缓存

一、什么是浏览器缓存?(入门级) 1. 浏览器缓存的定义浏览器缓存就是:浏览器把之前请求过的资源保存起来,下次访问同样的资源时可以直接用本地副本,而不是重新请求服务器。举个生活例子: 你第一次…

Linux I/O 多路复用机制对比分析:poll/ppoll/epoll/select

Linux I/O 多路复用机制对比分析:poll/ppoll/epoll/select 1. 概述 I/O 多路复用是现代高性能网络编程的核心技术,它允许单个线程同时监视多个文件描述符的状态变化,从而实现高效的并发处理。Linux 提供了多种 I/O 多路复用机制&#xff0c…

高防服务器租用:保障数据安全

您的网络速度是否卡顿,业务是否经常受到网络攻击的威胁呢?别担心,高防服务器租用能够帮助你解决这些困扰!高防服务器租用拥有着卓越的防御能力,可以帮助企业抵御各种网络攻击,能够轻松化解各种超大流量的网…

基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用

基于卫星或无人机平台的多光谱数据在地质、土壤调查和农业等应用领域发挥了重要作用,在地质应用方面,综合Aster的短波红外波段、landsat热红外波段等多光谱数据,可以通过不同的多光谱数据组合,协同用于矿物信息有效提取。第一&…

CSS content-visibility:提升页面渲染性能的 “智能渲染开关”

在前端开发中,你是否遇到过这样的问题:页面包含大量 DOM 元素(如长列表、复杂表格)时,滚动变得卡顿,交互响应迟缓?这往往是因为浏览器需要不断渲染屏幕外的元素,浪费了大量计算资源。…

Javascript面试题及详细答案150道之(016-030)

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

仿真电路:(十七下)DC-DC升压压电路原理简单仿真

1.前言 升压的环境用的没降压的多,但是升压会用在LED的很多电路上,所以理解一下原理 2.DC-DC升压原理简单仿真 升压原理 下面还是对升压进行简单的仿真 拓扑结构以及原理和降压还是很相似的,只是位置不太一样,过程推导就不推导…