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

Redis 大 key 问题解决方案

在 Redis 中遇到“大 key”问题(即某个 key 对应的数据结构过大,可能是字符串过长、hash/列表/集合中元素过多等)时,会带来严重的性能问题,比如:

  • 阻塞主线程(Redis 是单线程的);
  • 复制开销大(主从同步耗时高);
  • 慢日志、阻塞客户端
  • 内存碎片或爆内存

一、如何识别大 key

可以用以下方式排查:

  1. MEMORY USAGE key 查看 key 占用的内存。
  2. SCAN + TYPE + MEMORY USAGE 脚本遍历判断哪些 key 是大 key。
  3. 使用 redis-cli --bigkeys 工具,扫描整个 Redis 找出最大 key。
  4. 使用监控工具(如 RedisInsight、Datadog)分析内存占用和慢查询。

二、应对大 key 的解决方案

1. 拆分大 key

把一个大 key 拆成多个小 key,按规则命名,例如:

  • 原始:user:123:friends(有10万好友)
  • 拆分后:
    user:123:friends:0
    user:123:friends:1
    ...
    user:123:friends:99
    

每个 key 存 1000 个元素。读取时按页组合读取。

2. 分页访问

对于 list/set/zset/hash 结构,分页读取避免一次取完:

  • list/zset:用 LRANGE / ZRANGE 分段。
  • hash:用 HSCAN
  • set:用 SSCAN

3. 避免一次性删除大 key

直接 DEL 大 key 会阻塞主线程。可以改用:

  • 异步删除:Redis 4.0+ 支持 UNLINK key,会异步释放内存;
  • 分批删除:拆成多个小 key,用脚本或程序定期删除。

4. 合理设计数据结构

比如:

  • 不要存超长字符串;
  • 对于大 hash,可以按子业务拆分多个 hash;
  • 考虑是否适合 Redis,超大数据是否应存在其他数据库(如 Elastic、Mongo、Postgres)。

5. 开启 Lazy-free 模式

配置 Redis(4.0+)支持后台异步删除:

lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes

6. 使用 TTL 控制过期

设置合适的过期时间,避免数据堆积成大 key。

三、补充建议

  • 定期巡检:每天自动扫描大 key 预警。
  • 监控慢查询和阻塞事件,及时定位问题。
  • 开发规范控制数据写入,避免突发写入形成大 key。
http://www.xdnf.cn/news/6498.html

相关文章:

  • Windows软件插件-音视频捕获
  • 配置别名路径 @
  • 【落羽的落羽 C++】进一步认识模板
  • SpringBoot应用启动过程
  • 如何通过高防CDN让CC攻击有来无回?
  • 数学复习笔记 10
  • 鸿蒙OSUniApp 开发的文件上传与下载功能#三方框架 #Uniapp
  • CAPL编程系列_04
  • std::vector c++
  • LeetCode 热题 100 1.两数之和
  • 竞品分析是什么,包括哪些内容?AI竞品分析生成器推荐!
  • 20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图
  • VMware中快速安装与优化Ubuntu全攻略
  • 28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
  • string(c++)
  • 如何在 Visual Studio Code 中克隆 GitHub 上的 Git 仓库?
  • Java并发编程面试题总结
  • 从管理痛点破局:安科瑞预付费系统赋能高校智慧水电
  • 最优化方法Python计算:有约束优化应用——线性不可分问题支持向量机
  • Java集合框架
  • Python解析Excel入库如何做到行的拆分
  • mysql 基础复习-安装部署、增删改查 、视图、触发器、存储过程、索引、备份恢复迁移、分库分表
  • 五件应该被禁止自行托管的事情(5 Things That Should Be Illegal to Self Host)
  • 【MySQL】基础知识
  • 线程的两种实现方式
  • 云服务模型深度解析:IaaS、PaaS 和 SaaS
  • DevExpressWinForms-TreeList-基础概念介绍
  • 《Java 大视界——Java 大数据在智能电网分布式能源协同调度中的应用与挑战》
  • 面试题:请解释Java中的垃圾回收机制(Garbage Collection, GC),并讨论不同的垃圾回收算法及其优缺点
  • 涨薪技术|0到1学会性能测试第65课-SQL捕获阻塞事件