Redis持久化测试方案_模拟突发写入下RDB/AOF的表现

千晨小哥_5345

千晨小哥_5345

2026-05-08

723人浏览

原创

要用 redis-benchmark 模拟突发写入压力,需设 -n 500000 -c 200 -t set -p 10,清空 save 配置并禁用自动 rdb,通过 info persistence 监控 rdb_bgsave_in_progress 和 aof_delayed_fsync 等指标定位瓶颈。

redis持久化测试方案_模拟突发写入下rdb/aof的表现

如何用 redis-benchmark 模拟突发写入压力

直接用 redis-benchmark 走默认参数,根本压不出 RDB/AOF 的瓶颈点——它默认只发 10 万请求、并发 50,节奏太匀,没法触发 fork 阻塞或 AOF fsync 延迟。要测“突发”,得人为制造短时高吞吐+长连接堆积。

实操建议:

  • 用 -n 500000 -c 200 -t set:50 万次写入、200 并发,比默认更易让子进程 fork 拖慢主线程
  • 加 -P 10 启用 pipeline,单连接批量发命令,模拟真实业务突发场景(比如秒杀后集中落库)
  • 务必在测试前清空 save 配置项,避免干扰;同时用 CONFIG SET save "" 动态关闭自动 RDB,只保留你手动控制的时机
  • 记录 INFO persistence 中的 rdb_bgsave_in_progress 和 aof_rewrite_in_progress 变化,比看日志更准

RDB fork 阻塞怎么定位和量化

fork 不是“卡死”,而是主线程在复制页表时短暂不可响应,表现为 client 端超时或延迟毛刺。Linux 的 vm.overcommit_memory=1 设置会影响 fork 效率,但更关键的是 Redis 进程的内存页数量——不是总内存大小,而是实际分配的匿名页数。

实操建议:

  • 用 cat /proc/$(pidof redis-server)/status | grep VmRSS 查 RSS,再结合 getconf PAGESIZE 估算页数,页越多 fork 越慢
  • 在 redis.conf 中设置 auto-aof-rewrite-percentage 0,禁用 AOF rewrite,避免它和 RDB fork 冲突
  • 用 strace -p $(pidof redis-server) -e trace=fork,clone 监控 fork 耗时(注意 strace 本身有开销,仅用于定位)
  • 观察 latency monitor 输出:redis-cli --latency -h x.x.x.x -p 6379,突发期间若出现 >100ms 的延迟尖峰,大概率是 fork 导致

AOF fsync 策略对写入吞吐的真实影响

appendfsync always 在突发写入下不是“每次写都磁盘刷”,而是每次 write() 后立刻调用 fsync(),这会让吞吐暴跌到几百 QPS;everysec 是折中,但要注意:它不是“每秒刷一次”,而是把这一秒内所有 write 缓冲合并刷盘,一旦后台刷盘线程卡住(比如磁盘 I/O 高),缓冲区会堆积,最终触发阻塞式 fsync。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载

实操建议:

  • 测试前用 CONFIG SET appendonly yes + CONFIG SET appendfsync everysec,再用 redis-cli BGREWRITEAOF 触发一次重写,确保 AOF 文件干净
  • 监控 INFO persistence 中的 aof_delayed_fsync:值大于 0 表示已发生延迟刷盘,说明缓冲区开始积压
  • 对比 appendfsync no(依赖 OS 刷盘)下的吞吐,你会发现它接近 RDB 模式,但崩溃丢失风险不可控——这不是性能问题,是数据可靠性边界问题
  • 别只看平均延迟,用 redis-cli --intrinsic-latency 100 测 Redis 自身事件循环抖动,排除网络和客户端干扰

RDB 和 AOF 混合开启时谁真正接管写入路径

Redis 4.0+ 的混合持久化(aof-use-rdb-preamble yes)不是“RDB 和 AOF 同时工作”,而是在 AOF rewrite 完成后,用 RDB 格式快照替代前面的文本协议命令。所以日常写入仍走 AOF append,只有 rewrite 期间才生成 RDB 片段。

实操建议:

  • 开启混合模式后,redis-cli BGREWRITEAOF 生成的 AOF 文件开头是 REDIS0009 魔数(RDB 格式),后面才是 AOF 命令——用 head -c 10 aof-file 可验证
  • 不要以为开了混合模式就能“兼顾速度和安全”:rewrite 期间依然会 fork,且 AOF 文件体积比纯 RDB 大得多,恢复更慢
  • 测试恢复时间时,用 time redis-server redis.conf --appendonly yes 启动并计时,注意观察 INFO persistence 中的 aof_last_load_time_sec 字段,它比 shell 的 time 更准
  • 线上若用混合模式,必须预留足够内存:rewrite 过程中,Redis 会同时持有旧 AOF、新 AOF(含 RDB 片段)、以及 fork 出的子进程内存副本

最常被忽略的一点:持久化行为高度依赖操作系统调度和磁盘 I/O 调度器。同一份配置,在 ext4 + deadline 和 xfs + mq-deadline 下表现可能差 3 倍——别只盯着 Redis 参数调优,先确认 cat /sys/block/*/queue/scheduler 和 vm.swappiness 是否合理。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4529

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4075

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7552

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7462

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1136

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6518

6

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习