首页/数据/Redis 进阶速查/快照临时文件与残留处理
持久化56 条

快照临时文件与残留处理

快照写入 temp-<pid>.rdb 后再原子替换 dump.rdb;进程被强杀可能残留 temp 文件,一般无害,可确认无对应进程后清理。

Redis 进阶速查数据更新于 2026-10-13

临时文件与原子替换

生成快照时 Redis 不会直接覆盖 dump.rdb,而是先写一个形如 temp-<pid>.rdb 的临时文件,写完再用 rename 原子替换正式文件,这样任意时刻磁盘上都有一份完整可用的快照。进程被强杀或磁盘写满时可能留下写了一半的临时文件,它们通常无害,但清理前必须确认当前没有快照在进行。

基本信息

机制写入临时文件后原子重命名替换
临时文件命名temp-<pid>.rdb
残留常见原因进程被强杀、磁盘写满、保存中断
清理前提确认没有正在进行的后台保存

典型使用场景

  • 数据目录里出现多余临时文件,判断能不能删
  • 磁盘告警时排查空间被谁占用
  • 迁移或扩容后确认数据目录内容是否正常
  • 快照失败时通过残留文件的时间戳反推发生时间
  • 编写自动清理脚本前明确安全判定条件

查看与安全清理

查看与安全清理
# 看数据目录里的残留快照,注意进程号与时间戳
ls -lh /data/redis/temp-*.rdb
# 确认当前没有后台保存在跑(0 表示空闲)
redis-cli INFO persistence | grep -E 'rdb_bgsave_in_progress|rdb_last_bgsave_status'
# 确认该进程号已经不存在,再考虑删除
ls -l /proc/12345 2>/dev/null || echo "进程不存在"
rm /data/redis/temp-12345.rdb

文件与状态对照

对象含义判断要点
dump.rdb正式快照文件任何时刻都应能被加载
temp-<pid>.rdb写入中的临时文件保存结束后应自动消失
rdb_bgsave_in_progress是否正在保存为 1 时不要动临时文件
rdb_last_bgsave_status最近一次保存结果err 时优先查磁盘与权限
dir数据目录配置临时文件与目标文件需在同一文件系统
原子替换依赖临时文件与目标文件位于同一文件系统;如果用符号链接或挂载点把它们分到不同设备,rename 不再原子,快照可能只写了一半就被业务看到。
把数据目录指向内存文件系统(如 tmpfs)会让快照在重启后直接消失;数据目录必须落在真实磁盘或持久化卷上,并单独监控剩余空间。

易错点

  • 在快照进行中删除临时文件 → 本次快照直接损坏,正式文件不会更新 → 先确认 rdb_bgsave_in_progress 为 0 再操作
  • 数据目录放在容器临时层或内存文件系统 → 重启后快照消失,数据无从恢复 → 挂载持久化卷存放数据目录
  • 临时文件与目标文件跨文件系统 → rename 失去原子性,可能读到半截快照 → 保持同一目录、同一文件系统
  • 磁盘写满导致保存反复失败,却只盯着临时文件 → 真正原因在空间或权限 → 结合保存状态与磁盘使用率一起判断

数据来源与参考

  • Redis 官方文档:RDB 文件写入机制说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌