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

【Redis】大key对持久化的影响

目录

  • 1、对RDB持久化的影响
    • 【1】生成RDB时的性能问题
    • 【2】恢复RDB时的风险
  • 2、对AOF持久化的影响
    • 【1】AOF写入问题
    • 【2】AOF重写问题
  • 3、混合持久化的影响
  • 4、解决方案
    • 【1】持久化配置优化
    • 【2】运维策略
    • 【3】大key处理
  • 5、最佳实践

1、对RDB持久化的影响

【1】生成RDB时的性能问题

1、阻塞主线程:当执行SAVE命令或配置了自动BGSAVE时,大key的序列化会占用大量CPU资源
2、fork延迟:BGSAVE需要fork子进程,大key会导致fork操作耗时增加(尤其在虚拟内存较大的实例中)
3、磁盘I/O压力:大key会导致RDB文件提交膨胀,写入磁盘时间变长

【2】恢复RDB时的风险

1、加载时间延长:大key会显著增加redis重启的数据加载时间
2、内存峰值:加载过程中大key可能导致内存使用量瞬间翻倍(先读取再反序列化)

2、对AOF持久化的影响

【1】AOF写入问题

1、追加延迟:每次修改大key都会生成较大的AOF记录,导致AOF文件膨胀
2、fsync压力:配置为appendfsync always时,大key写入会显著降低吞吐量

【2】AOF重写问题

1、重写耗时: BGREWRITEAOF需要遍历所有数据,大key会延长重写过程
2、内存消耗:重写期间会创建子进程,大key导致内存占用翻倍(Copy-on-Write机制)
3、阻塞风险:重写完成后合并新AOF文件时,大key可能导致短暂服务暂停

3、混合持久化的影响

1、混合文件体积大:RDB部分包含大key会导致整个AOF文件头部膨胀
2、恢复效率下降:虽然RDB部分加速了恢复,但大key仍会影响整体恢复速度

4、解决方案

【1】持久化配置优化

# 对于大Key较多的场景建议配置
stop-writes-on-bgsave-error no  # 避免因大Key导致bgsave失败时拒绝写入
aof-rewrite-incremental-fsync yes  # AOF重写时增量同步
aof-use-rdb-preamble yes  # 启用混合持久化

【2】运维策略

1、错峰持久化:在低峰期手动触发BGSAVE或BGREWRITEAOF
2、监控报警:设置rdb_last_bgsave_status和aof_last_bgrewrite_status监控
3、内存控制:对可能的大key设置maxmemory-policy淘汰策略

【3】大key处理

1、渐进式删除大key(避免直接del导致阻塞)

5、最佳实践

1、设计阶段:避免创建大key,采用分片存储设计
2、监控阶段:定期使用redis-cli --bigkeys扫描
3、优化阶段:对大value考虑使用外部存储(如文件系统),redis只保存引用
4、版本选择:使用redis 4.0+版本,其改进的lazy-free机制可降低大key删除对持久化的影响


文章转载自:

http://aZRiLhMx.qcLmz.cn
http://ILtUQkBu.qcLmz.cn
http://8DOcnu95.qcLmz.cn
http://PcTEFjP0.qcLmz.cn
http://MMMqDu5Y.qcLmz.cn
http://XKqnLRNY.qcLmz.cn
http://NVGUJt9f.qcLmz.cn
http://TW8LkDl5.qcLmz.cn
http://NuIGl3vo.qcLmz.cn
http://AZwHoZEJ.qcLmz.cn
http://AVEavRDa.qcLmz.cn
http://k7oQCx4x.qcLmz.cn
http://VXPC1wJt.qcLmz.cn
http://mSv3pjqN.qcLmz.cn
http://hJEkFfMx.qcLmz.cn
http://w7zPo3Lw.qcLmz.cn
http://cVwQklTH.qcLmz.cn
http://3u96xngn.qcLmz.cn
http://GLP5yHZK.qcLmz.cn
http://EwqRX26y.qcLmz.cn
http://MnndtBBv.qcLmz.cn
http://JK9H4eDO.qcLmz.cn
http://doeKyo8C.qcLmz.cn
http://UxJiQGjs.qcLmz.cn
http://W3l0Unqf.qcLmz.cn
http://HHVB73IX.qcLmz.cn
http://7tMpPdoq.qcLmz.cn
http://t1Ly96Pd.qcLmz.cn
http://y7BwR8Hn.qcLmz.cn
http://ldqidTZB.qcLmz.cn
http://www.dtcms.com/a/229476.html

相关文章:

  • 定时器时钟来源可以从输入捕获引脚输入
  • Unity ARPG战斗系统 _ RootMotion相关知识点
  • GPTBots在AI大语言模型应用中敏感数据匿名化探索和实践
  • 基于InternLM的情感调节大师FunGPT
  • agent mode 代理模式,整体要求,系统要求, 系统指令
  • 2025年微信小程序开发:AR/VR与电商的最新案例
  • [Python] struct.unpack() 用法详解
  • 深入理解前端DOM:现代Web开发的基石
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--简单的工作进度管理
  • 法律大语言模型(Legal LLM)技术架构
  • React 项目初始化与搭建指南
  • istringstream
  • RTOS,其基本属性、语法、操作、api
  • Python基于随机森林回归模型的葡萄酒质量预测项目实战
  • JS手写代码篇---手写call函数
  • Java基础之数组(附带Comparator)
  • python打卡day43
  • Leetcode 1336. 每次访问的交易次数
  • MATLAB仿真生成无线通信网络拓扑推理数据集
  • [25-cv-05986]Keith律所代理Paisley Yazel版权画
  • 【连接器专题】案例:产品测试顺序表解读与应用
  • SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)
  • 全球高尔夫球场运营服务市场:现状、挑战与未来发展
  • python学习(一)
  • 【java】springboot注解关键字
  • 【MATLAB去噪算法】基于CEEMD联合小波阈值去噪算法(第三期)
  • leetcode hot100 链表(二)
  • Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例
  • 适老化场景重构:现代家政老年照护虚拟仿真实训室建设方案​
  • 如何在 vue 中实现一个自定义拖拽的指令或插件