0

0

Redis冷热数据识别与交换怎么实现

WBOY

WBOY

发布时间:2023-05-26 17:23:03

|

985人浏览过

|

来源于亿速云

转载

背景

Redis混合存储产品是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品。

通过将部分冷数据存储到磁盘,在保证绝大部分访问性能不下降的基础上,大大降低了用户成本并突破了内存对Redis单实例数据量的限制。

其中,对冷热数据的识别和交换是混合存储产品性能的关键因素。

冷热数据定义

在Redis混合存储中,内存和磁盘的比例是用户可以自由选择的:

Redis冷热数据识别与交换怎么实现

Redis混合存储实例将所有的Key都认为是热数据,以少量的内存为代价保证所有Key的访问请求的性能是高效且一致的。而对于Value部分,在内存不足的情况下,实例本身会根据最近访问时间,访问频度,Value大小等维度选取出部分value作为冷数据后台异步存储到磁盘上直到内存小于制定阈值为止。

在Redis混合存储实例中,我们将所有的Key都认为是热数据保存在内存中是出于以下两点考虑:

  1. Key的访问频度比Value要高很多。

  2. 作为KV数据库,通常的访问请求都需要先查找Key确认Key是否存在,而要确认一个key不存在,就需要以某种形式检查所有Key的集合。保留所有键值对于内存中的数据结构来说,能够保证与纯内存数据结构的查找速度完全一致。

  3. Key的大小占比很低。

  4. 在一般的业务模型中,即使是普通字符串类型,其Value一般比Key大几倍。而对于Set,List,Hash等集合对象,所有成员加起来组成的Value更是比Key大了好几个数量级。

因此,Redis混合存储实例的适用场景主要有以下两种:

  1. 数据访问不均匀,存在热点数据;

  2. 内存不足以放下所有数据,且Value较大(相对于Key而言)

冷热数据识别

当内存不足时的情况下,实例会按照最近访问时间,访问频度,value大小等维度计算出value的权重,将权重最低的value存储到磁盘上并从内存中删除。

伪代码如下:

Redis冷热数据识别与交换怎么实现

在最理想的情况下,我们会希望能够精准地计算出当前最低的值。然而,value的冷热程度根据访问情况动态变化的,每次都重新计算所有value的冷热权重的时间消耗是完全不可接受的。

Redis本身在内存满的情况下会根据用户设置的淘汰策略淘汰数据,而热数据从内存写到磁盘也可以认为是一种“淘汰”的过程。从性能,准确率以及用户理解程度考虑,我们在冷热数据识别时采用和Redis类似的近似计算方法,支持多种策略, 通过随机采样小部分数据来降低CPU和内存消耗,通过eviction pool利用采样历史信息来辅助提高准确率。

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

下载

Redis的近似淘汰算法命中率的示意图在不同版本和不同采样样本数目的配置下被展示。被淘汰的数据点呈浅灰色,未淘汰的数据点呈灰色,而测试过程中新增的数据点则为绿色。

冷热数据交换

Redis混合存储在冷热数据交换过程在后台IO线程中完成。

热数据->冷数据

异步方式:

  1. 主线程在内存接近最大值时,生成一系列数据换出任务;

  2. 后台线程执行这些数据换出任务,执行完毕之后通知主线程;

  3. 主线程更新释放内存中的value,更新内存中数据字典中的value为一个简单的元信息;

  4. 同步方式:

当写入的流量过大,异步方式无法及时将数据换出,可能会导致内存超出最大规格。主线程将直接执行数据换出任务,达到变相限流的目的。

冷数据->热数据

异步方式:

  1. 主线程在执行命令前,先判断命令涉及的value是否都在内存中;

  2. 如果不是,生成数据加载任务,挂起该客户端,主线程继续处理其他客户端请求;

  3. 后台线程执行数据加载任务,执行完毕后通知主线程;

  4. 主线程在内存中更新数据字典中的value,唤醒之前挂起的客户端,处理其请求。

  5. 同步方式:

在Lua脚本,具体命令执行阶段,如果发现有value存储在磁盘上,主线程将直接执行数据加载任务,保证Lua脚本和命令的语义不变。

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

191

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

101

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

116

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

89

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

632

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

19

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

14

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

3

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号