8.3.1 RDB快照原理与配置参数

RDB快照原理与配置参数#

RDB(Redis Database)通过周期性生成内存快照文件实现持久化。Redis 主进程 fork 子进程,子进程将内存数据序列化为 dump.rdb;主进程继续处理请求,写入变化通过 Copy-On-Write 隔离,降低对线上读写的影响。

原理草图(RDB 快照流程)#

文章图片

关键配置参数与示例#

  • save:配置自动快照条件,格式 save <seconds> <changes>
  • stop-writes-on-bgsave-error:RDB 失败是否阻止写入
  • rdbcompression:是否压缩 RDB
  • rdbchecksum:是否计算校验和
  • dbfilenamedir:文件名与存放目录

示例:在 /etc/redis/redis.conf 中配置快照策略与文件路径

# 快照触发条件
save 900 1
save 300 10
save 60 10000

# RDB失败时阻止写入
stop-writes-on-bgsave-error yes

# 压缩与校验
rdbcompression yes
rdbchecksum yes

# 文件名与目录
dbfilename dump.rdb
dir /var/lib/redis

命令示例(手动触发与状态查看)#

# 1) 手动触发RDB快照
redis-cli BGSAVE

# 2) 查看RDB状态与最近保存时间
redis-cli INFO persistence | egrep "rdb_bgsave_in_progress|rdb_last_save_time|rdb_last_bgsave_status"

# 3) 检查RDB文件是否生成
ls -lh /var/lib/redis/dump.rdb

命令解释:
- BGSAVE:后台生成快照,主进程继续服务
- INFO persistence:查看持久化状态与最近一次保存结果
- ls -lh:确认文件大小与时间戳

运维场景示例(多实例区分)#

多实例时为每个实例设定不同端口、目录与文件名:

# /etc/redis/redis_6380.conf
port 6380
dir /data/redis/6380
dbfilename dump_6380.rdb
save 300 10

排错指南(常见问题与处理)#

  1. BGSAVE 失败,日志提示 “No space left on device”
df -h /var/lib/redis
# 扩容或清理后重试
redis-cli BGSAVE
  1. 权限不足导致无法写入
# 检查目录权限
ls -ld /var/lib/redis
# 修复权限
chown -R redis:redis /var/lib/redis
  1. RDB 频繁触发导致 IO 峰值
    - 调整 save 频率
    - 观察系统 IO
iostat -x 1 5

练习#

  1. 配置 save 120 50,制造 50 次写入触发快照:
# 连续写入50次
for i in {1..50}; do redis-cli SET k$i v$i >/dev/null; done
redis-cli INFO persistence | grep rdb_last_bgsave_status
  1. 关闭自动快照并验证:
# 注释所有save行
# save 900 1
# save 300 10
# save 60 10000
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep rdb_last_bgsave_status
  1. 修改 dbfilename 后重启 Redis,确认新文件名生成:
# 修改配置后重启
systemctl restart redis
ls -lh /var/lib/redis | grep dump