Redis数据库存储键值对的底层原理分析
前言
Redis可以简单理解为是一个存储键值对的内存结构
下面我们来看一下Redis使用什么数据结构来存储键值对的叭
Redis键值对的存储原理
Redis存储键值对的数据结构是哈希表
存储键值对的运行机制
因为Redis的数据存储类型是多种多样的,所以管理键值对的哈希表只是存储这个数据的地址
我下面解释运行存储键值对运行机制的时候的术语解释
- 存储地址: 哈希表存储的 数据地址 位置
- 数据地址: 数据本身的 地址 位置
使用哈希表寻找键值对
1、使用key通过哈希函数计算出哈希表中的存储地址
2、通过存储地址找到哈希表中存放的数据地址
3、通过数据地址找到数据并进行读取
使用哈希表存储键值对
1、使用key通过哈希函数计算出哈希表中的存储地址
2、通过存储地址找到数据应该存放的位置,把数据地址存放在里面
使用哈希表存储键值对弊端
当存储数据过多的时候,此时出现哈希冲突,会在每一个哈希桶中形成冲突链表,从而出现寻找存储地址效率变慢
对弊端的优化
redis同时维护数组相同的两个哈希表
当冲突链表过多的时候,会进行数据迁移
把备用的哈希表数组长度增大到满足当前数据规模的大小
把数据迁移到新的满足当前数据规格大小的哈希表中
一次性迁移会对redis造成短时间的阻塞,影响业务,所以采用渐进式的迁移哈希表
渐进式迁移哈希表
下面说的哈希表的桶可以理解为冲突链表
每次有请求发生过来的时候,在处理请求的同时顺带对这个旧哈希表进行从左到右的桶迁移
每次请求迁移一个桶
迁移期间查询数据两个哈希表都进行查询,存储数据存储到新的哈希表中
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Redis出现(error)NOAUTH Authentication required.报错的解决办法(秒懂!)
这篇文章主要给大家介绍了关于Redis出现(error)NOAUTH Authentication required.报错的解决办法,对于 这个错误这通常是因为Redis服务器需要密码进行身份验证,但客户端没有提供正确的身份验证信息导致的,需要的朋友可以参考下2024-03-03


最新评论