Redis AOF文件过大启动缓慢且重写后仍偏大,如何快速启动?
解决Redis AOF过大导致启动缓慢的方案
优化AOF重写触发策略
默认的AOF重写触发条件是auto-aof-rewrite-percentage 100和auto-aof-rewrite-min-size 64mb,可以把触发条件调得更激进——比如把百分比降到50,最小size设为32mb,让Redis更频繁触发重写,避免文件过度膨胀。改完配置文件后执行CONFIG REWRITE把配置持久化。启用AOF混合持久化(Redis 4.0及以上版本)
开启aof-use-rdb-preamble yes,这样AOF文件开头会是紧凑的RDB格式,后面跟着增量的AOF日志。启动时先快速加载RDB部分,再处理少量增量日志,启动速度会大幅提升。而且重写后的文件因为包含RDB格式,体积也会比纯AOF小很多。手动触发AOF重写并清理旧文件
执行BGREWRITEAOF命令让后台重写AOF,等重写完成确认新文件有效后,手动删掉旧的AOF文件。如果重写后体积还是偏大,得检查业务里有没有大量重复或无效命令——比如反复给同一个key执行SET,这类操作可以在业务层优化,减少不必要的写入。拆分AOF文件(极端场景下使用)
要是上面的方法都压不下体积,可以试试这个操作(风险较高,先在测试环境验证):- 执行
SAVE生成RDB文件,然后停掉Redis; - 备份当前AOF文件,删掉原AOF;
- 重启Redis加载RDB,此时会生成新的空AOF,之后把备份AOF里RDB生成时间之后的增量日志过滤出来,按顺序追加到新AOF中。
- 执行
从业务层减少无效写入
排查业务代码,砍掉不必要的Redis写入:比如给同一个key设相同值时,先判断值有没有变化再执行SET;批量操作改用MSET这类命令减少日志条数;过期键优先用EXPIRE,别频繁删了再写,这样能大幅减少AOF日志量。
内容的提问来源于stack exchange,提问作者Beihai Zhang
相关产品推荐
相关产品推荐

