讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis怎样处理超大数据结构_防范大Key引发的网络阻塞与内存分配问题

夏宇同学_9215

夏宇同学_9215

发布时间:2026-03-13 13:25:03

|

991人浏览过

|

来源于php中文网

原创

redis-cli --bigkeys 可快速定位大Key但存在采样偏差,仅扫描默认DB0、每类型只记最大值,易漏中型大Key;需逐库执行并调低采样间隔(-i 0.01),发现超12MB String即属高危;删大Key须用UNLINK(Redis 4.0+),并关注内存碎片率>1.5时启用主动碎片整理;读取大结构必须分页(如HSCAN/LRANGE带范围);写入前应在应用层按大小或时间切片,单value≤10KB、单结构≤1万元素且≤2MB;拆分后删除需SCAN匹配前缀避免残留。

redis怎样处理超大数据结构_防范大key引发的网络阻塞与内存分配问题

用 redis-cli --bigkeys 快速定位大Key,但别信它全量扫描的结果

Redis 本身不主动暴露哪些 Key 占内存最多,redis-cli --bigkeys 是最轻量、最常用的发现手段,但它只采样部分数据库(默认 DB 0),且对每个类型只记录“最大那个”,容易漏掉分布均匀的中型大Key(比如几百个 5MB 的 Hash)。更关键的是:它不反映网络压力——一个 1MB 的 GET 不一定卡 Redis 主线程,但会吃光网卡带宽。

  • 运行时加 -i 0.01 降低采样间隔,减少对线上影响(默认是 0.001 秒,太激进)
  • 务必在所有 DB 上分别执行:redis-cli -n 1 --bigkeys、redis-cli -n 2 --bigkeys……别只扫 DB 0
  • 结果里看到 Biggest string found 'xxx' has 12000000 bytes,这不是警告,是事故倒计时——12MB String 在千兆网卡上一次读取就要占满 100ms 带宽

删大Key必须用 UNLINK,但得确认 Redis 版本和内存碎片状态

DEL 是同步阻塞删除,遇到含 50 万成员的 Set,主线程可能卡几百毫秒;UNLINK 把释放内存的动作扔给后台线程,主线程几乎无感。但它不是银弹:Redis 4.0+ 才支持,且后台回收依赖内存碎片整理能力。

  • 先检查版本:redis-cli info server | grep redis_version,低于 4.0 必须升级或改用分批删除脚本
  • 执行 UNLINK 后观察 INFO memory | grep mem_fragmentation_ratio,如果 > 1.5 且持续上升,说明后台线程在碎片内存里找不着连续块来释放,反而堆积延迟
  • 此时要配合 CONFIG SET activedefrag yes,否则 UNLINK 只是把阻塞从“前台”挪到“后台积压”

读大结构必须分页或流式处理,禁止 HGETALL/LRANGE 0 -1

一个包含 80 万字段的 Hash,HGETALL 会把全部数据一次性序列化、拼包、发给客户端,不仅主线程卡住,还极易触发客户端 OOM 或 TCP 缓冲区溢出。这不是“慢”,是设计层面的拒绝服务。

  • 替代方案:用 HSCAN 分批拉取,每次 COUNT 500,自己控制节奏;服务端压力小,客户端也容易做断点续传
  • 列表/有序集合同理:LRANGE 和 ZRANGE 永远带明确起止索引,别用 -1;真要全量导出,走 SCAN + 类型判断 + 分批提取
  • 注意:Lua 脚本里也不能写 redis.call('HGETALL', KEYS[1]),脚本执行期间仍是单线程阻塞,照样卡死

写入前就该拆分,别等报警才想起“大Key治理”

把一份用户行为日志 JSON 直接塞进 SET user:123:log,看着省事,实则埋雷。真正稳定的写法是在应用层就按时间片或大小切片,比如按天分 Key:user:123:log:20260310、user:123:log:20260311,单个 Value 控制在 100KB 内。

  • String 类型单 value 建议 ≤ 10KB;Hash/List/Set/ZSet 单结构元素数建议 ≤ 1 万,总内存 ≤ 2MB
  • 拆分逻辑不要藏在业务代码深处,封装成工具方法,比如 safeSetLargeString(key, value, maxChunk=8192),自动分片+加后缀+设置统一 TTL
  • 最容易被忽略的一点:拆分后,原 DEL 变成批量 DEL,要用 SCAN 匹配前缀再删,否则残留 Key 会悄悄吃掉内存
大Key 的本质不是“数据多”,而是“单次操作不可控”。监控能告诉你它存在,但只有在写入路径上设防,才能让它根本长不出来。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2055

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3022

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1036

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3419

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5879

2023.08.02

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2828

2023.11.20

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2381

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

336

2025.12.22

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

0

2026.10.10

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn