当前位置: 首页 > news >正文

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

前言

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

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

Redis键值对的存储原理

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

存储键值对的运行机制

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

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

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

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

使用哈希表寻找键值对

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

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

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

使用哈希表存储键值对

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

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

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

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

对弊端的优化

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

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

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

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

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

渐进式迁移哈希表

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

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

http://www.dtcms.com/a/311568.html

相关文章:

  • 信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
  • Web API安全防护全攻略:防刷、防爬与防泄漏实战方案
  • Dispersive Loss:为生成模型引入表示学习 | 如何分析kaiming新提出的dispersive loss,对扩散模型和aigc会带来什么影响?
  • 二、无摩擦刚体捉取——抗力旋量捉取
  • uniapp 数组的用法
  • 【c#窗体荔枝计算乘法,两数相乘】2022-10-6
  • Python Pandas.from_dummies函数解析与实战教程
  • 【语音技术】什么是动态实体
  • 【解决错误】IDEA启动SpringBoot项目 出现:Command line is too long
  • 5734 孤星
  • process_vm_readv/process_vm_writev 接口详解
  • 如何在 Ubuntu 24.04 或 22.04 LTS Linux 上安装 Guake 终端应用程序
  • Next.js 怎么使用 Chakra UI
  • LINUX82 shell脚本变量分类;系统变量;变量赋值;四则运算;shell
  • 落霞归雁·思维框架
  • 队列的使用【C++】
  • 【王阳明代数讲义】基本名词解释
  • InfluxDB 与 Node.js 框架:Express 集成方案(一)
  • 【RK3568 RTC 驱动开发详解】
  • 操作系统-lecture5(线程)
  • Terraria 服务端部署(Docker)
  • Trae + Notion MCP:将你的Notion数据库升级为智能对话机器人
  • 自动驾驶中的传感器技术14——Camera(5)
  • C#开发入门指南_学习笔记
  • Clickhouse#表记录转换为insert语句
  • 回归预测 | Matlab实现CNN-LSTM-Multihead-Attention多变量回归预测
  • Spring AI MCP 技术深度解析:从工具集成到企业级实战
  • PyQt6教程(003):运行QTDesigner生成的UI文件
  • 零基础 “入坑” Java--- 十六、字符串String 异常
  • 深入理解C++中的Lazy Evaluation:延迟计算的艺术