Redis数据库存储键值对的底层原理

前言

Redis可以简单理解为是一个存储键值对的内存结构

下面我们来看一下Redis使用什么数据结构来存储键值对的叭

Redis键值对的存储原理

Redis存储键值对的数据结构是哈希表

存储键值对的运行机制

因为Redis的数据存储类型是多种多样的,所以管理键值对的哈希表只是存储这个数据的地址

我下面解释运行存储键值对运行机制的时候的术语解释

        存储地址:   哈希表存储的 数据地址 位置

        数据地址:   数据本身的 地址 位置

使用哈希表寻找键值对

1、使用key通过哈希函数计算出哈希表中的存储地址

2、通过存储地址找到哈希表中存放的数据地址

3、通过数据地址找到数据并进行读取

使用哈希表存储键值对

1、使用key通过哈希函数计算出哈希表中的存储地址

2、通过存储地址找到数据应该存放的位置,把数据地址存放在里面

使用哈希表存储键值对弊端

当存储数据过多的时候,此时出现哈希冲突,会在每一个哈希桶中形成冲突链表,从而出现寻找存储地址效率变慢

对弊端的优化

redis同时维护数组相同的两个哈希表

当冲突链表过多的时候,会进行数据迁移

把备用的哈希表数组长度增大到满足当前数据规模的大小

把数据迁移到新的满足当前数据规格大小的哈希表中

一次性迁移会对redis造成短时间的阻塞,影响业务,所以采用渐进式的迁移哈希表

渐进式迁移哈希表

下面说的哈希表的桶可以理解为冲突链表

每次有请求发生过来的时候,在处理请求的同时顺带对这个旧哈希表进行从左到右的桶迁移
每次请求迁移一个桶
迁移期间查询数据两个哈希表都进行查询,存储数据存储到新的哈希表中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全球化 2.0 | 中国香港教育机构通过云轴科技ZStack实现VMware替代

中国香港教育机构是非营利性组织。随着智慧教育升级与业务量激增,客户面临VMware持续的授权和维护成本带来总体拥有成本压力;部分业务仍运行在性能与扩展性不足的老旧物理服务器和 VMware 架构上,存在单点故障风险;跨校区物理机与…

C#中对于List的多种排序方式

在 C# 中给 List<AI> 排序&#xff0c;只要 明确排序规则&#xff08;比如按某个字段、某几个字段、或外部规则&#xff09;&#xff0c;就能用下面几种常见写法。下面全部基于这个示例类&#xff1a;public class AI {public int country; // 国家编号public int pr…

Redis 核心概念、命令详解与应用实践:从基础到分布式集成

目录 1. 认识 Redis 2. Redis 特性 2.1 操作内存 2.2 速度快 2.3 丰富的功能 2.4 简单稳定 2.5 客户端语言多 2.6 持久化 2.7 主从复制 2.8 高可用 和 分布式 2.9 单线程架构 2.9.1 引出单线程模型 2.9.2 单线程快的原因 2.10 Redis 和 MySQL 的特性对比 2.11 R…

react 和 react native 的开发过程区别

React 和 React Native 虽然都使用 React 思想和语法&#xff08;函数组件、Hooks、JSX 等&#xff09;&#xff0c;但在 开发流程、渲染机制、UI 组件、样式处理、运行平台 等方面有明显差异。以下是对比总结&#xff1a;✅ 一、开发目的和平台不同对比项ReactReact Native应用…

Pycaita二次开发基础代码解析:几何体重命名与参数提取技术

一、几何体智能重命名技术1.1 功能需求与应用场景classmethod def rename_bodies(cls):"""重命名零部件中的所有几何体"""# 主几何体名称标准化opart.main_body.name "零件几何体"i 1 # 计数器初始化for body in opart.bodies:if b…

《React Router深解:复杂路由场景下的性能优化与导航流畅性构建》

路由系统是连接用户操作与应用功能的中枢神经,而React Router作为React生态中处理路由逻辑的核心工具,其在复杂应用中的表现直接决定着用户体验的优劣。当应用规模扩张至数十甚至上百个路由,嵌套层级跨越多层,导航控制中的性能问题便会逐渐凸显——从首屏加载的延迟到路由切…

Linux进程程序替换

单进程版程序替换——最简单的程序替换程序替换&#xff08;Process Replacement&#xff09;是Linux/Unix系统中一个重要的概念&#xff0c;指的是一个正在运行的进程完全被另一个程序替换的过程。这是通过exec系列函数实现的。特点&#xff1a;1.进程不变性。替换前后进程的P…

【数据结构与算法】21.合并两个有序链表(LeetCode)

文章目录合并两个有序链表&#xff1a;高效算法解析与实现问题描述核心思路&#xff1a;双指针尾插法完整代码实现关键点解析1. 边界条件处理2. 头节点初始化3. 节点比较与插入4. 剩余节点处理常见错误与修正优化方案&#xff1a;哨兵节点算法应用场景总结总结合并两个有序链表…

gd32modbus从机移植

文章目录1. 背景2. 改写方式2.1 cursor2.2 使用方式3. 移植过程修改概述修改的文件和内容1. PRO2/Core/Inc/usart.h2. PRO2/Core/Src/usart.c3. PRO2/Drivers/BSP/STM32MB/port/portserial.c4. PRO2/Core/Src/stm32f1xx_it.c5. PRO2/Core/Src/main.c6. PRO2/Core/Src/gpio.c引脚…

PCB 控深槽如何破解 5G 基站 120℃高热魔咒?

5G 基站在高频通信下的功耗较 4G 基站提升 3-4 倍&#xff0c;射频模块、电源单元等核心部件的工作温度常突破 120℃&#xff0c;远超设备安全阈值&#xff08;≤85℃&#xff09;&#xff0c;形成制约通信稳定性的 “高热魔咒”。印制线路板&#xff08;PCB&#xff09;作为热…

Linux和shell

最快入门的方式是使用苹果系统。此外&#xff0c;累计补充学习&#xff1a;一、目录结构/bin&#xff0c;二进制文件 /boot&#xff0c;启动文件 /dev&#xff0c;设备文件 /home&#xff0c;主目录&#xff0c;一般外接包、安装包放在这里 /lib&#xff0c;库文件 /opt&#x…

Vue多请求并行处理实战指南

在 Vue 中同时发送多个请求主要通过并行处理机制实现&#xff0c;常用方法包括 Promise.all、axios.all&#xff08;基于 Axios 库&#xff09;和 async/await。以下为详细操作指南和注意事项&#xff1a; 一、使用 Promise.all 并行发送请求 Promise.all 接收一个 Promise 数组…