Redis入门到通关之Redis数据结构-Set篇

文章目录

  • ☃️概述
  • ☃️数据结构
  • ☃️源码
  • ☃️其他


在这里插入图片描述

🌈 欢迎莅临我的个人主页👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇

🎓 博主简介:
我是请回答1024,一名Java领域深耕多年的技术博主,每一步成长都离不开持续的学习和积累。

🔧 技术专长:
在 Java 的广阔领域中,我不断深入学习,特别是在MySQL, Redis 等方面,我积累了丰富的实践经验。我热衷于将编程技能转化为解决实际问题的有效工具。因此,业余时间里,我积极参与技术支持工作,已经为数百名用户提供了近千次专业帮助,助力他们高效地解决了各种问题。我深信,技术的真正价值在于服务人类,提升生活质量。

📝 博客风采:
我深知知识分享的重要性,因此,在博客中我倾注心血,撰写并分享关于深度学习、PyTorch、Python的实用内容。今年,我笔耕不辍,已发表原创文章300余篇,代码分享次数逾两万次。我衷心希望通过这些内容,为广大读者提供实用的学习资源和解决方案,助力他们在深度学习的道路上稳步前行。

💡 服务项目:
除了知识分享,我还提供科研入门辅导(代码实战方面)、知识付费答疑以及个性化需求解决等服务。我深知每个人的需求都是独特的,因此我致力于提供个性化的解决方案,以满足不同用户的需求。如果您对以上服务感兴趣,或者有任何疑问,欢迎添加底部微信(reply1024)与我交流。

☃️概述

SetRedis中的单列集合,满足下列特点:

  • 不保证有序性
  • 保证元素唯一
  • 求交集、并集、差集

在这里插入图片描述

可以看出,Set对查询元素的效率要求非常高,思考一下,什么样的数据结构可以满足?
HashTable,也就是Redis中的Dict,不过Dict是双列集合(可以存键、值对)

SetRedis中的集合,不一定确保元素有序,可以满足元素唯一、查询效率要求极高。


☃️数据结构

  • 为了查询效率和唯一性,set采用HT编码(Dict)。Dict中的key用来存储元素,value统一为null。

  • 当存储的所有数据都是整数,并且元素数量不超过set-max-intset-entries时,Set会采用 IntSet编码,以节省内存。

在这里插入图片描述
结构如下:

在这里插入图片描述


☃️源码

在这里插入图片描述


☃️其他

底下的就别看了

在 Redis 中,Set 类型的底层数据结构主要有两种:哈希表和有序集合。

哈希表:
Redis 中的 Set 类型通常使用哈希表来实现。哈希表是一种键值对存储结构,其中键是唯一的,而值则不需要唯一。哈希表的特点是可以快速地进行插入、删除和查找操作,平均时间复杂度为 O(1)。

有序集合:
有序集合是一种特殊的 Set 类型,它在每个元素的基础上关联了一个分值(score),这个分值用来对集合中的元素进行排序。在有序集合中,元素是唯一的,但分值可以重复。Redis 中的有序集合数据结构可以是跳跃表(skiplist)或者是压缩列表和哈希表的混合结构,具体选择哪种取决于元素数量和类型。

跳跃表:
跳跃表是一种有序数据结构,类似于链表,但是通过添加多级索引使得查找效率更高。在 Redis 中,跳跃表常被用来实现有序集合,因为它支持快速的元素插入、删除和范围查找操作,平均时间复杂度为 O(log n)。

压缩列表和哈希表:
对于元素数量较少的有序集合,Redis 也可以使用压缩列表和哈希表的混合结构来存储数据。这种结构在节省内存空间方面比跳跃表更有优势,但在插入和删除操作上可能没有跳跃表高效。

Redis 的 Set 类型主要使用哈希表来实现普通集合,而对于有序集合,则可以使用跳跃表或者压缩列表和哈希表的混合结构。这些不同的底层数据结构使得 Redis 能够高效地支持 Set 类型的各种操作需求。


在这里插入图片描述



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

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

相关文章

深入了解 Spring Boot 的加载过程

Spring Boot 的加载过程可以大致分为以下几个阶段: 类加载:首先,Java 虚拟机会加载必要的类,包括 Spring Boot 的核心类和应用程序的相关类。配置解析:Spring Boot 会解析各种配置,如 application.properti…

解读币安Megadrop:如何参加第一期BounceBit活动?

币安推出新的代币发行平台 Megadrop,第一期为 BounceBit。 跟 launchpool 相比, 主要不同是 1)锁仓 bnb 有收益的倍数加成 2)做任务有收益加成。 我认为核心目的有两个: 1)更多收益给 BNB 长期持有者&am…

数仓建模—数据模型

数仓建模—数据模型 前面我们讲了什么是数据仓库,以及数据仓库的发展历史,从这里开始我们讲解数仓建模,在开始之前我们先了解一下什么是数据模型,以及常见的数据模型都有哪些 什么是数据模型 在详细探讨数据模型之前,我们需要明确什么是数据。从本质上讲,数据由收集、…

【运维】docker-compose部署mysql5.7、mysql 8,单节点,双主

一、docker-composemysql 5.7 单机版mysql 5.7 ## docker-compose config ## 检查当前目录docker-compose.yml文件配置是否正确 ## docker-compose up -d ## -d 为后台启动 ## docker-compose up -d --force-rereate ## 强制重新创建容器…

axios 实现上传、下载

一、下载(支持批量下载) const downloadFile (fileList) > {console.log(fileList, 下载list)fileList.forEach((e) > {const uid uuidv4()const CancelToken axios.CancelTokenlet source CancelToken.source()transmissionStore().setDownlo…

Django中实现JWT(构成原理、base64)

Django中实现JWT(构成原理、base64) 目录 Django中实现JWT(构成原理、base64)简介JWT的构成原理base64的使用手动验证token 简介 JWT (JSON Web Token)通常用于对用户进行身份验证和授权,是一种无状态的认证机制,通过在用户和服务器之间传递加密的令牌来…

jenkins修改全局安全配置之后登录错误

教训(流泪) 事情是这样的,第一次我需要用单点登录集成jenkins,jenkins可以通过插件的方式支持cas协议,我当时也不很懂,经过我学网上的一顿乱配置,jenkis上不去了,虽然这是公司本地环…

大数据——Zookeeper ZBA协议(四)

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播:保证数据一致性崩溃恢复:保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…

记一次 Vscode + Latex 正向/反向搜索忽然失效

遥望大半个月前,完成论文撰写后,这些天虽然多次打开项目,但我真的一个字都没动过,今天想着开始着手修改一下,打开项目发现正向/反向搜索忽然失效了,感觉浑身有蚂蚁在爬,思索再三后找到问题&…

【数学归纳法 反证法】菲蜀定理

裴蜀定理(或贝祖定理,Bzout’s identity)得名于法国数学家艾蒂安裴蜀,说明了对任何整数a、b和它们的最大公约 数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且&…

[测试]ChaosBlade: 丢包、延迟、断网、磁盘、cpu占用、内存占用等资源耗尽故障注入利器--编辑中

目录 ChaosBlade是什么? ChaosBlade可以制造哪些工况/故障? 使用文档 git仓库:chaosblade/README_CN.md at master chaosblade-io/chaosblade GitHub ChaosBlade是什么? ChaosBlade: 一个简单易用且功能强大的混沌实验实施工具 ChaosBlade是阿里巴巴开源的一款遵循混…

根据出生日期确定属相 出生日期判断生肖

目录 一.总体说明 二.完整代码 三.逐行分析 一.总体说明 生肖是一个古老的中国文化概念,也称为属相。它是根据农历年份来划分的十二个不同的动物符号,每个动物代表一个特定的年份周期。这十二个生肖分别是:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗和猪。 每个生肖都…

2024系统架构师---论软件系统架构评估

对于软件系统,尤其是大规模的复杂软件系统来说,软件的系统架构对于确保最终系统的质量具有十分重要的意义,不恰当的系统架构将给项目开发带来高昂的代价和难以避免的灾难。对一个系统架构进行评估,是为了:分析现有架构存在的潜在风险,检验设计中提出的质量需求,在系统被构…

[图解]软件开发中的糊涂用语-04-为什么要追究糊涂用语

0 00:00:00,030 --> 00:00:05,620 今天呢,我们来说一个为什么要追究糊涂用语的问题 1 00:00:06,310 --> 00:00:06,548 2 00:00:06,548 --> 00:00:11,077 大家知道我们前些天都发了好几个视频 3 00:00:11,077 --> 00:00:13,461 追究这个糊涂用语 4 00…

如何搭建一个vue2组件库(king-ui-pro)

文章引用图片无法查看,直接查看原文 感兴趣的可以关注或订阅下这个系列,后续会陆续将相关的组件与公共方法进行分享 目前已经完成了的组件有 多行省略pro版,不是简单的多行省略效果 公共方法: 1、图片预览,知乎的图…

sql知识总结三

3.floor报错注入 (1)涉及到的函数 as 别名,group by 分组 >select concat_ws(-,(select database()),floor(rand()*2)) as a from users group by a; count()函数 汇总统计数量 >select count(*),concat_ws(-,(select database(0…

Attention和Transformer灵魂七问

1. 引言 最近,ChatGPT和其他聊天机器人将大语言模型LLMs推到了风口浪尖。这就导致了很多不是学ML和NLP领域的人关注并学习attention和Transformer模型。在本文中,我们将针对Transformer模型结构提出几个问题,并深入探讨其背后的技术理论。这…

YoloV9改进策略:下采样改进|自研下采样模块(独家改进)|疯狂涨点|附结构图

文章目录 摘要自研下采样模块及其变种第一种改进方法 YoloV9官方测试结果改进方法测试结果总结 摘要 本文介绍我自研的下采样模块。本次改进的下采样模块是一种通用的改进方法,你可以用分类任务的主干网络中,也可以用在分割和超分的任务中。已经有粉丝用…

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

解决Valid在@RequestParam场景不生效的问题

项目场景: 最近帮同事在看一个后端接口数据关于类型、长度、字符内容规范化的任务,想到了使用Valid注解的方式来完成,但是在实际使用的时候,发现前后端数据在不同场景下交互方式的差异,会导致Valid注解使用不生效。 问…