【Redis】Zset类型常用命令

news2024/10/21 12:11:15

文章目录

  • 一. Zset有序集合简介.
  • 二. 添加元素相关命令.
    • 2.1 向有序集合中添加元素(==zadd==)
  • 三. 查询元素相关操作.
    • 3.1 查询有序集合中的元素个数( ==zcard zcount==)
    • 3.2 查询指定区间内的元素(==zrange zrevrange zrangebyscore==)
    • 3.3 查询有序集合中指定成员的排名(==zrank zrevrank== )
    • 3.4 查询有序集合中指定成员的分数(==zscore==)
  • 四. 删除元素相关操作.
    • 4.1 删除并返回最大/最小的n个元素(==zpopmax zpopmin==)
    • 4.2 带有阻塞性质删除最大/小元素(==bzpopmin bzpopmax==)
    • 4.3 删除有序集合中的n个元素( ==zrem zremrangebyrank zremrangebyscore==)
  • 五. 集合运算相关操作.
    • 5.1 求有序集合交集的操作(==zinterstore==)
    • 5.2 求集合并集的操作(==zunionstore==)

一. Zset有序集合简介.

  1. 定义: Zset(有序集合)是Redis中的一种数据类型,它保留了集合不能有重复成员的特点,但与普通集合不同的是,Zset中的每个元素都与一个唯一的浮点类型的分数(score)相关联,这使得Zset中的元素可以维护有序性。

  2. 如何保证有序性: 每个元素都与一个分数相关联,分数用于确定元素在集合中的位置,且分数可以重复当分数相同时,元素会根据其字典顺序进行排序。

  3. **Zset在Redis中底层的编码方式:

    • 压缩列表(ziplist):一种紧凑的数据结构,通常用于存储元素较少、元素较小的有序集合。它以连续的内存块形式存储数据,每个节点可以包含一个或多个元素,且可以非常紧凑地存储整数和字符串等不同类型的元素。
    • 跳跃表(skiplist):一种基于链表的数据结构,通常用于存储元素较多、元素较大的有序集合。跳跃表通过多层链表实现快速查找,其插入、删除、查找的时间复杂度均为O(logN)。

二. 添加元素相关命令.

2.1 向有序集合中添加元素(zadd)

  1. 命令基本格式:

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

  1. 解释参数含义:
  1. NX: 当number不存在的时候才会添加对应的score-number
  2. XX: 当number存在的时候才会修改对应的score-number
  3. GT: 当更新元素的时候, 只有当给定的score比已有的score大, 才会更新成功.
  4. LT: 当更新元素的时候, 只有当给定的score比已有的score小, 才会更新成功.
  5. CH: 将返回值从添加的新元素数修改为更改的元素总数(CH是changed的缩写)。更改的元素是添加的新元素和已经存在的元素,并为其更新了分数。因此,在命令行中指定的具有与过去相同分数的元素不会被计算在内。注意:通常ZADD的返回值只计算添加的新元素的数量
  6. INCR:当指定这个选项时,ZADD的行为类似于ZINCRBY。在这种模式下只能指定一个分数-元素对
  1. 时间复杂度:

O(log(N)),其中N是排序集合中元素的个数。

  1. 演示命令的使用:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三. 查询元素相关操作.

3.1 查询有序集合中的元素个数( zcard zcount)

  1. 命令基本格式:

ZCARD key
ZCOUNT key min max

  1. 时间复杂度:

zcard O(1)
zcount O(log(N)) N是排序集合中元素的个数。

  1. 演示命令的使用:
    在这里插入图片描述

3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)

  1. 命令基本格式:

ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES] 获取指定下标范围内的元素
ZREVRANGE key start stop [WITHSCORES] 逆序获取指定下标范围内的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 按照分数来找元素,和zcount的效果类似

  1. 时间复杂度:

zrange O(log(N)+M),其中N是排序集合中的元素个数,M是返回的元素个数。
zrevrange O(log(N)+M),其中N是排序集合中的元素个数,M是返回的元素个数。
zrangebyscore O(log(N)+M)其中N是排序集合中的元素个数M是返回的元素个数。如果M是常数(例如总是要求前10个元素有LIMIT),你可以认为它是O(log(N))。

  1. 演示命令的使用:
    在这里插入图片描述

3.3 查询有序集合中指定成员的排名(zrank zrevrank )

  1. 命令基本格式:

ZRANK key member [WITHSCORE] 查询有序集合中指定成员的排名
ZREVRANK key member [WITHSCORE] 查询有序集合中指定成员的逆序排名

  1. 时间复杂度:

O(log(N))

  1. 演示命令的使用:
    在这里插入图片描述

3.4 查询有序集合中指定成员的分数(zscore)

  1. 命令基本格式:

ZSCORE key member查询有序集合中指定成员的分数

  1. 时间复杂度:

O(1)

  1. 演示命令的使用:
    在这里插入图片描述

四. 删除元素相关操作.

4.1 删除并返回最大/最小的n个元素(zpopmax zpopmin)

  1. 命令基本格式:

ZPOPMAX key [count] 删除并返回最大的n个元素
ZPOPMIN key [count] 删除并返回最小的n个元素

  1. 时间复杂度:

都是 O(log(N)*M)其中N是排序集合中的元素个数,M是弹出的元素个数。

  1. 演示命令的使用:
    在这里插入图片描述

4.2 带有阻塞性质删除最大/小元素(bzpopmin bzpopmax)

  1. 命令基本格式:

BZPOPMAX key [key ...] timeout
BZPOPMIN key [key ...] timeout

  1. 时间复杂度:

O(log(N)) N是排序集合中元素的个数O(log(N)) N是排序集合中元素的个数

  1. 演示命令的使用:
    在这里插入图片描述
    在这里插入图片描述

4.3 删除有序集合中的n个元素( zrem zremrangebyrank zremrangebyscore)

  1. 命令基本格式:

ZREM key member [member ...] 删除有序集合中的n个元素
ZREMRANGEBYRANK key start stop 删除有序集合中指定排名范围内的成员
ZREMRANGEBYSCORE key min max 删除有序集合中指定分数范围内的成员

  1. 时间复杂度:

zrem O(M*log(N)),其中N是排序集合中元素的个数,M是要移除的元素的个数
zremrangebyrank O(log(N)+M),其中N是排序集合中的元素个数,M是操作移除的元素个数
zremrangebyscore O(log(N)+M),其中N是排序集合中的元素个数,M是操作移除的元素个数。

  1. 演示命令的使用:
    在这里插入图片描述

五. 集合运算相关操作.

5.1 求有序集合交集的操作(zinterstore)

  1. 命令基本格式:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

  1. 解释参数含义:
    • destination 要把求交集的结果存储到哪个key对应的zset之中.
    • numkeys 描述了后续有几个key参与交集运算.
    • weight 每个key对应的权重
  2. 时间复杂度:

O(N*K)+O(M*log(M))最坏情况,其中N是最小的输入排序集,K是输入排序集的个数,M是结果排序集中元素的个数。

5.2 求集合并集的操作(zunionstore)

  1. 命令基本格式:

ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>]

  1. 时间复杂度:

O(N)+O(M log(M)),其中N是输入排序集的大小之和,M是结果排序集的元素个数。

  1. 演示命令的使用:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型学习路线路径,巨详细!

大模型技术已经成为推动人工智能发展的关键力量。无论你是初学者还是有经验的开发者&#xff0c;想要掌握大模型应用&#xff0c;都需要遵循一定的学习路线。 从核心技术解析到模型微调与私有化部署&#xff0c;逐步深入大模型应用的世界。 这份学习路线图详细的介绍了那年每…

规划控制复现:Apollo LQR横向控制(算法原理推导与流程)

本文在前文已经搭建好的规划控制验证平台中进行LQR算法的复现&#xff1a; 1.车辆动力学建模 汽车轨迹跟踪误差模型示意图如下&#xff1a; 为车辆横向速度,为车辆纵向速度;和 分别为质心到前、 后轴的距离 ; 为车辆的横 摆角 ; 和 分别为车辆前 、 后轮的侧偏角。并设车辆…

【C++】哈希表的模拟实现

目录 一、闭散列&#xff08;开放定址定法&#xff09; 1、哈希表的结构&#xff1a; 2、哈希表的插入&#xff1a; 3、哈希表的查找&#xff1a; 4、哈希表的删除&#xff1a; 二、开散列&#xff08;哈希桶&#xff09; 1、哈希表的结构&#xff1a; 2、构造与析构&a…

若依前后分离版集成积木报表进行token传递

若依分离板集成积木报表就不说了需要的请移步&#xff1a;若依前后分离版集成积木报表-CSDN博客 考虑到前端摸鱼不干活,所以一般都是前后端都干&#xff0c;我这里前后端都搞上&#xff0c;你们直接抄&#xff0c;抄完接着去摸鱼&#xff0c;代码不美观&#xff0c;轻喷 一、…

【JavaEE】【多线程】synchronized和死锁

目录 一、synchronized详解1.1 互斥1.2 可重入 二、死锁2.1 死锁成因2.2 避免死锁 一、synchronized详解 1.1 互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 语法&#xff1…

AI时代程序员何去何从?提升自我还是被淘汰出局!

AI 在编程界的使用变得越来越普遍了。随着 ChatGPT 的横空出世&#xff0c;各种大语言模型如雨后春笋不断出现。国外如谷歌 Bard、Anthropic 的 Claude&#xff0c;国内如百度文心一言、阿里通义千问、讯飞星火认知大模型、昆仑万维天工大模型等。 想想看&#xff0c;以前得花好…

支持国密算法的数字证书-国密SSL证书详解

在互联网中&#xff0c;数字证书作为标志通讯各方身份信息的数字认证而存在&#xff0c;常见的数字证书大都采用国际算法&#xff0c;比如RSA算法、ECC算法、SHA2算法等。随着我国加强网络安全技术自主可控的大趋势&#xff0c;也出现了支持国密算法的数字证书-国密SSL证书。那…

【网络安全】缓存欺骗问题之查看个人资料接口

未经许可,不得转载。 文章目录 正文正文 目标网站 target.com,查看个人资料页面时,API 端点为/get_user,完整的 URL 是 https://target.com/web-api/v1/get_user?timestamp=123456(其中 timestamp 是一个易受攻击的参数)。 我注意到响应中有一个 cf-cache-status= MISS…

k8s部署Kafka集群超详细讲解

准备部署环境 Kubernetes集群信息 NAMEVERSIONk8s-masterv1.29.2k8s-node01v1.29.2k8s-node02v1.29.2 Kafka&#xff1a;3.7.1版本&#xff0c;apche版本 Zookeeper&#xff1a;3.6.3版本 准备StorageClass # kubectl get sc NAME PROVISIONER RECLA…

Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例

拉取镜像 docker pull docker.io/webcenter/activemq 启动容器 docker run -d --name myactivemq -p 61616:61616 -p 8162:8161 docker.io/webcenter/activemq:latest 这样就代表启动成功了 浏览器访问 http://localhost:8162/ admin admin 开启验证 修改配置文件/opt/ac…

关于k8s集群高可用性的探究

1. k8s的高可用的核心是什么&#xff1f; 说到核心、本质 意味着要从物理层来考虑技术 k8s是一个容器编排管理工具&#xff0c;k8s受欢迎的时机 是docker容器受欢迎时&#xff0c;因为太多的docker容器&#xff0c;管理起来是一个大工程 那么刚好k8s是google自己用了十来年…

STM32L031F6P6基于CubeMX的串口通信调试笔记

用CubeMX创建项目 本实例用的PA14、PA13两个引脚&#xff0c;LPUART1。 对串口参数进行设置&#xff1a; 开启串口中断&#xff1a; 时钟源设置成内部高频时钟&#xff1a; 对项目进行设置&#xff1a; 生成代码&#xff1a; 在串口初始化函数中加入 __HAL_UART_ENA…

Asp.net Core MVC 动态路由

动态路由 asp.net core 3.0 就支持了 // 映射关系public class TranslationDatabase{private static Dictionary<string, Dictionary<string, string>> Translations new Dictionary<string, Dictionary<string, string>>{{"en", new Dictio…

《Vue3 踩坑》expose 和 defineExpose 暴露属性或方法注意事项

选项式写法 使用 选项式API - 状态选项 - expose 一定要注意&#xff1a; 接下来&#xff0c;进一步看示例说明&#xff1a; 设置 expose 仅显示列出的属性/方法才能被父组件调用&#xff1b;代码第 2 行&#xff0c;父组件可访问属性 a 和 方法 myFunc01&#xff0c;不可访…

Windows server 2022 数据中心版本的安装

安装前的准备工作&#xff1a; 1.准备好VMware虚拟机&#xff08;略&#xff09; 2.准备好镜像 图1-1 准备安装镜像 3.准备好安装的位置&#xff08;F盘2022vm文件夹&#xff09; 图1-2 选择并设定安装位置 4.开始安装 图1-3 开心VMware安装向导 图1-4 插入光盘镜像 图1-5…

视频转文字工具搜集

视频转文字工具是一种能够将视频中的音频内容转化为文字的软件或在线服务。这类工具通常支持多种视频格式和语言&#xff0c;适用于不同的场景和需求。以下是一些推荐的视频转文字工具及其特点&#xff1a; 媒关系&#xff1a;这是一款免费的视频转文字工具&#xff0c;支持多种…

ABAQUS应用11——支座弹簧

文章目录 0、背景1、ABAQUS中几类弹簧的简介2、SPRING1的性质初探 0、背景 1、ABAQUS中几类弹簧的简介 先说参考来源&#xff0c;ABAQUS2016的帮助文档里第4卷&#xff0c;32.1.1节&#xff0c;有三种弹簧&#xff08;SPRING1 、SPRING2 以及SPRINGA&#xff09;。 三种弹簧里…

【AIGC】ChatGPT提示词Prompt高效编写模式:Self-ask Prompt、ReACT与Reflexion

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;自我提问 (Self-ask Prompt)如何工作应用实例优势结论 &#x1f4af;协同思考和动作 (ReACT)如何工作应用实例优势结论 &#x1f4af;失败后自我反思 (Reflexion)如何工作…

oracle数据恢复—文件损坏导致Oracle数据库打开报错的数据恢复案例

oracle数据库故障&分析&#xff1a; 打开oracle数据库时报错&#xff0c;报错信息&#xff1a;“system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有&#xff1a;控制文件损坏、数据文件损坏、数据文件…

FastDFS单节点部署

FastDFS单节点部署 1、FastDFS入门1.1 分布式文件系统1.2 FastDFS 简介1.3 FastDFS 发展历史1.4 FastDFS 整体架构1.5 FastDFS 线上使用者 2、FastDFS 环境搭建2.1 FastDFS 安装2.1.1 安装前的准备2.1.2 安装 libfastcommon库2.1.3 安装 FastDFS 2.2FastDFS 配置2.2.1 去掉/etc…