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:是否计算校验和
- dbfilename、dir:文件名与存放目录
示例:在 /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
排错指南(常见问题与处理)#
- BGSAVE 失败,日志提示 “No space left on device”
df -h /var/lib/redis
# 扩容或清理后重试
redis-cli BGSAVE
- 权限不足导致无法写入
# 检查目录权限
ls -ld /var/lib/redis
# 修复权限
chown -R redis:redis /var/lib/redis
- RDB 频繁触发导致 IO 峰值
- 调整save频率
- 观察系统 IO
iostat -x 1 5
练习#
- 配置
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
- 关闭自动快照并验证:
# 注释所有save行
# save 900 1
# save 300 10
# save 60 10000
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep rdb_last_bgsave_status
- 修改
dbfilename后重启 Redis,确认新文件名生成:
# 修改配置后重启
systemctl restart redis
ls -lh /var/lib/redis | grep dump