【Redis】set 和 zset 类型的介绍和常用命令

1. set

1.1 介绍

set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集

1.2 常用命令

命令

介绍

时间复杂度

sadd key element [element ...]

将一个或多个元素添加到指定的集合中

O (k),k 是要添加的元素个数

srem key element [element ...]

从指定集合中移除一个或多个元素

O (k),k 是要移除的元素个数

scard key

获取指定集合中的元素数量

O (1)

sismember key element

判断指定元素是否存在于集合中

O (1)

srandmember key [count]

从指定集合中随机返回一个或多个元素

O (n),n 是count的值

spop key [count]

从指定集合中随机移除并返回一个或多个元素

O (n),n 是count的值。

smembers key

获取指定集合中的所有元素。

O (k),k 是集合中的元素个数

sinter key [key ...] sinterstore

求多个集合的交集

O (m * k),k 是几个集合中元素最小的个数,m 是参与交集计算的键个数

sunion key [key ...] sunionstore

求多个集合的并集

O (k),k 是多个集合的元素个数总和

sdiff key [key ...] sdiffstore

求多个集合的差集

O (k),k 是多个集合的元素个数总和

1.3 内部编码

intset:当集合中的所有元素都是整数,并且元素数量较少时会使用intset编码来存储集合

hashtable:当集合中的元素不满足intset的条件,会使用hashtable编码来存储集合

1.4 应用场景

用户标签:为用户、商品等实体打标签,每个实体对应一个 Set,标签作为 Set 中的元素。

去重:在处理大量数据时,经常需要去除重复元素。例如在日志分析中,记录用户的访问 IP 地址,使用 Set 可以自动对 IP 进行去重,保证每个 IP 只被记录一次。

2. zset

2.1 介绍

zset 保留了 set 集合中不能有重复成员的特点,与之不同的是,zset 中的元素是有序的,集合中的每一个元素都有一个唯一的浮点类型的分数(score)与之关联,依次来进行排序,使得有序集合中的元素可以维护有序性,虽然集合中的元素是不能重复的,但是分数允许重复。

2.2 常用命令

命令

介绍

时间复杂度

zadd key score member [score member ...]

向有序集合中添加一个或多个成员,以及成员对应的分值

O (k * log (n)),k 是添加成员的个数,n 是当前有序集合的元素个数

zcard key

获取有序集合的成员数量

O (1)

zscore key member

获取有序集合中指定成员的分值

O (1)

zrank key member

返回有序集合中指定成员的排名(从 0 开始,按分值从小到大排序)

O (log (n)),n 是当前有序集合的元素个数

zrevrank key member

返回有序集合中指定成员的排名(从 0 开始,按分值从大到小排序)

O (log (n)),n 是当前有序集合的元素个数

zrem key member [member ...]

移除有序集合中的一个或多个成员

O (k * log (n)),k 是删除成员的个数,n 是当前有序集合的元素个数

zincrby key increment member

为有序集合中指定成员的分值加上增量 increment

O (log (n)),n 是当前有序集合的元素个数

zrange key start end [withscores]

按分值从小到大返回有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrevrange key start end [withscores]

按分值从大到小返回有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrangebyscore key min max [withscores]

按分值从小到大返回有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrevrangebyscore key max min [withscores]

按分值从大到小返回有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zcount key min max

计算有序集合中指定分值区间内成员的数量

O (log (n)),n 是当前有序集合的元素个数

zremrangebyrank key start end

按排名删除有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zremrangebyscore key min max

按分值删除有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zinterstore destination numkeys key [key ...]

计算给定的一个或多个有序集合的交集,并将结果存储在新的有序集合 destination 中

O (n * k) + O (m * log (m)),n 是输入集合最小的元素个数,k 是集合个数,m 是目标集合元素个数

zunionstore destination numkeys key [key ...]

计算给定的一个或多个有序集合的并集,并将结果存储在新的有序集合 destination 中

O (n) + O (m * log (m)),n 是输入集合总元素个数,m 是目标集合元素个数
 

2.3 内部编码

ziplist:如果有序集合中的元素个数较少,或者单个元素体积较小,就使用 ziplist 存储

skiplist:如果元素个数较多或者单个元素体积较大,使用 skiplist 存储

2.4 应用场景

基于 zset 有序的特点,可以用到很多场景中:

  1. 排行榜系统:比如游戏中的玩家排行榜,以玩家的积分作为分值,玩家昵称作为成员,能按分值(积分)对玩家进行排序,快速获取排名靠前或特定区间的玩家信息;视频平台的视频热度排行榜,以视频的播放量、点赞数等综合指标作为分值,视频 ID 作为成员,展示热门视频。
  2. 计分系统:在在线考试系统中,以考生的考试成绩作为分值,考生 ID 作为成员,可方便统计成绩排名、获取特定分数段的考生信息。

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

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

相关文章

happytime

happytime 一、查壳 无壳,64位 二、IDA分析 1.main 2.cry函数 总体:是魔改的XXTEA加密 在main中可以看到被加密且分段的flag在最后的循环中与V6进行比较,刚好和上面v6数组相同。 所以毫无疑问密文是v6. 而与flag一起进入加密函数的v5就…

【etcd】二进制安装etcd

由于生产服务器不能使用yum 安装 etcd ,或者 安装的etcd 版本比较老,这里介绍一个使用二进制安装的方式。 根据安装文档编写一个下载脚本即可 : 指定 etcd 的版本 提供了两个下载地址 一个 Google 一个 Github, 不过都需要外网 注释掉删除保…

MediaPipe与YOLO已训练模型实现可视化人脸和手势关键点检测

项目首页 - ZiTai_YOLOV11:基于前沿的 MediaPipe 技术与先进的 YOLOv11 预测试模型,精心打造一款强大的实时检测应用。该应用无缝连接摄像头,精准捕捉画面,能即时实现人脸检测、手势识别以及骨骼关键点检测,将检测结果实时、直观地…

学术总结Ai Agent中firecrawl(大模型爬虫平台)的超简单的docker安装方式教程

之前开源了学术总结ai agent,但是对非计算机专业来说,门槛有点高,再加上docker hub镜像被屏蔽,更是不容易上手啊。也有考虑用dify或者扣子去复刻一个,但是从专业用户的角度出发通过界面来拖拽配置实在是不高效&#xf…

交易股指期货有什么技巧吗?

交易股指期货有啥窍门呢?其实啊,追涨杀跌这招,虽然能挣点小钱,但风险也不小,一不小心就可能亏大了。我说的追涨杀跌,不是那种天天追着价格跑的小打小闹,而是要看大趋势,做宏观操作。…

Java线程认识和Object的一些方法ObjectMonitor

专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 要对Java线程有整体了解,深入认识到里面的一些方法和Object对象方法的区别。认识到Java对象的ObjectMonitor,这有助于后面的Synchron…

linux 函数 sem_init () 信号量、sem_destroy()

&#xff08;1&#xff09; &#xff08;2&#xff09; 代码举例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> #include <unistd.h>sem_t semaphore;void* thread_function(void* arg) …

ComfyUI中For Loop的使用

研究了半天&#xff0c;终于弄明白了如何使用For Loop。 1、在For中节点&#xff0c;必须有输出连接到For Loop End的initial_value点&#xff0c;才能确保节点执行完毕后才 进入下一轮循环&#xff0c;否则&#xff0c;可能导致节点没执行完&#xff0c;就进入下一个循环了。…

UbuntuWindows双系统安装

做系统盘&#xff1a; Ubuntu20.04双系统安装详解&#xff08;内容详细&#xff0c;一文通关&#xff01;&#xff09;_ubuntu 20.04-CSDN博客 ubuntu系统调整大小&#xff1a; 调整指南&#xff1a; 虚拟机中的Ubuntu扩容及重新分区方法_ubuntu重新分配磁盘空间-CSDN博客 …

ASP.NET Core 启动并提供静态文件

ASP.NET Core 启动并提供静态文件 即是单个可执行文件&#xff0c;它既运行 API 项目&#xff0c;也托管 前端项目&#xff08;通常是前端的发布文件&#xff09;。 这种方式一般是通过将 前端项目 的发布文件&#xff08;例如 HTML、CSS、JavaScript&#xff09;放入 Web AP…

网络原理(3)—— 传输层详解

目录 一. 再谈端口号 二. UDP协议(用户数据报协议) 2.1 UDP协议端格式 2.2 UDP报文长度 2.3 UDP校验和 三. TCP协议(传输控制协议) 3.1 TCP协议段格式 3.2 核心机制 3.2.1 确认应答 —— “感知对方是否收到” 3.2.2 超时重传 3.3.3 连接管理 —— 三次握手与四…

【算法设计与分析】实验7:复杂装载及0/1背包问题的回溯法设计与求解

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 针对复杂装载问题、及0/1背包问题开展分析、建模、评价&#xff0c;算法设计与优化&#xff0c;并进行编码实践。 理解复杂装载…

oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]

把多个查询结果上下合并, 即, 通过操作符将多个 SELECT 语句的结果集合并为一个结果集。虽然联合查询通常用于从多个表中检索数据&#xff0c;但它也可以用于从同一个表中检索不同的数据集。 联合查询: 交集,并集,差集 默认的排序规则通常是基于查询结果集中的列的自然顺序。…

增删改查(CRUD)操作

文章目录 MySQL系列&#xff1a;1.CRUD简介2.Create(创建)2.1单行数据全列插入2.2 单行数据指定插入2.3 多⾏数据指定列插⼊ 3.Retrieve(读取)3.1 Select查询3.1.1 全列查询3.1.2 指定列查询3.1.3 查询字段为表达式&#xff08;都是临时表不会对原有表数据产生影响&#xff09;…

早期车主告诉后来者,很后悔买电车,一辈子都被车企拿捏了

从2015年开始大力发展电车&#xff0c;至今已有快10年了&#xff0c;头几批车主或是已换车&#xff0c;或是准备换车&#xff0c;他们用车这么多年的困扰以及换车的麻烦&#xff0c;却告诉准备买电车的消费者&#xff0c;电车没有媒体宣传的那么好&#xff0c;买了电车基本上一…

架构技能(四):需求分析

需求分析&#xff0c;即分析需求&#xff0c;分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计&#xff0c;需求是输入&#xff0c;架构是输出&#xff0c;需求决定了架构。 决定架构的是软件的所有需求吗&#xff1f;肯定不是&#xff0c;真正决定架构…

H264原始码流格式分析

1.H264码流结构组成 H.264裸码流&#xff08;Raw Bitstream&#xff09;数据主要由一系列的NALU&#xff08;网络抽象层单元&#xff09;组成。每个NALU包含一个NAL头和一个RBSP&#xff08;原始字节序列载荷&#xff09;。 1.1 H.264码流层次 H.264码流的结构可以分为两个层…

pytorch生成对抗网络

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 生成对抗网络&#xff08;GAN&#xff0c;Generative Adversarial Network&#xff09;是一种深度学习模型&#xff0c;由两个神经网络组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff0…

AIGC技术中常提到的 “嵌入转换到同一个向量空间中”该如何理解

在AIGC&#xff08;人工智能生成内容&#xff09;技术中&#xff0c;“嵌入转换到同一个向量空间中”是一个核心概念&#xff0c;其主要目的是将不同类型的输入数据&#xff08;如文本、图像、音频等&#xff09;映射到一个统一的连续向量空间中&#xff0c;从而实现数据之间的…

芯片AI深度实战:给vim装上AI

系列文章&#xff1a; 芯片AI深度实战&#xff1a;私有模型deep seek r1&#xff0c;必会ollama-CSDN博客 芯片AI深度实战&#xff1a;自己的AI&#xff0c;必会LangChain-CSDN博客 芯片AI深度实战&#xff1a;给vim装上AI-CSDN博客 芯片AI深度实战&#xff1a;火的编程AI&…