Redis持久化配置,防止断电丢失缓存数据
Redis默认将数据保存在内存中,一旦服务器断电或进程崩溃,缓存数据就会全部丢失。
通过配置持久化,可以把内存中的数据定期写入磁盘,重启后自动恢复。
下面从零开始,带你完成Redis持久化配置。
先搞清楚RDB和AOF的区别
Redis提供两种持久化方式:
- RDB(Redis DataBase):在指定时间间隔内生成数据快照,保存为
.rdb文件。优点是文件紧凑、恢复快,适合备份;缺点是可能丢失最后一次快照后的数据。 - AOF(Append Only File):记录每次写操作命令,追加到
.aof文件。优点是可以做到秒级数据安全;缺点是文件较大,恢复速度比RDB慢。
生产环境建议同时开启RDB和AOF,既能快速恢复,又能最大限度减少数据丢失。
如果只能选一种,对数据安全性要求高选AOF,对性能要求高选RDB。
准备工作:确认Redis版本和配置文件路径
在开始配置前,先确认两件事:
- Redis版本:执行
redis-server --version,建议使用Redis 4.0以上版本,对持久化支持更完善。 - 配置文件位置:通常位于
/etc/redis/redis.conf(Linux源码安装)或/www/server/redis/redis.conf(宝塔面板)。如果不确定,执行ps aux | grep redis查看启动参数中的配置文件路径。
修改配置前,先备份原文件:
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
配置RDB快照:让Redis定期保存数据
打开配置文件,找到 SNAPSHOTTING 部分,修改或添加以下内容:
save 900 1 # 900秒内至少1个key变化,触发保存
save 300 10 # 300秒内至少10个key变化,触发保存
save 60 10000 # 60秒内至少10000个key变化,触发保存
dbfilename dump.rdb
dir /var/lib/redis # RDB和AOF文件的保存目录,确保Redis有写权限
注意事项:
dir目录必须存在且Redis进程有写入权限,否则持久化会失败。- 如果不需要RDB,可以注释掉所有
save行,或设置save ""。 - 修改后重启Redis:
systemctl restart redis或service redis restart。
配置AOF:实现秒级数据安全
同样在配置文件中,找到 APPEND ONLY MODE 部分:
appendonly yes # 开启AOF
appendfilename "appendonly.aof"
appendfsync everysec # 每秒同步一次,兼顾性能和安全
appendfsync 有三个可选值:
always:每条写命令都同步,最安全但性能最差。everysec:每秒同步一次,推荐使用,最多丢失1秒数据。no:由操作系统决定何时同步,性能最好但可能丢失较多数据。
AOF重写:随着时间推移,AOF文件会变大,Redis会自动重写压缩。
可以调整触发条件:
auto-aof-rewrite-percentage 100 # AOF文件比上次重写后增长100%时触发
auto-aof-rewrite-min-size 64mb # AOF文件至少64MB才触发重写
避坑指南:这些错误不要犯
- 目录权限问题:
dir指定的目录如果Redis没有写权限,日志会报Permission denied,持久化失败。用chown redis:redis /var/lib/redis修复。 - 同时开启RDB和AOF时的恢复顺序:Redis重启时优先使用AOF文件恢复,因为AOF数据更完整。如果AOF文件损坏,可以先用
redis-check-aof --fix修复。 - 不要随意删除持久化文件:
dump.rdb和appendonly.aof是数据恢复的唯一依据,删除前务必确认已有备份。 - 内存不足时持久化可能失败:确保服务器有足够内存和磁盘空间,特别是执行RDB快照时,Redis会fork子进程,内存占用可能翻倍。
验证配置是否生效
完成配置并重启Redis后,通过以下方式验证:
- 连接Redis:
redis-cli - 写入测试数据:
set test_key "hello" - 手动触发RDB保存:
bgsave,然后检查dir目录下是否生成dump.rdb文件。 - 查看AOF状态:
info persistence,关注aof_enabled:1和aof_last_bgrewrite_status:ok。 - 模拟断电:直接
kill -9Redis进程,然后重启,检查test_key是否还存在。
如果数据恢复成功,说明持久化配置正确。
如果数据丢失,检查日志文件(通常位于 /var/log/redis/redis-server.log)中的错误信息。
常见问题
RDB和AOF可以同时开启吗?
可以,而且推荐同时开启。Redis重启时会优先加载AOF文件,因为AOF记录更完整。
开启AOF后性能下降明显怎么办?
将 appendfsync 设置为 everysec,这是性能和数据安全的最佳平衡点。如果对性能要求极高,可以设置为 no,但要做好丢失数据的准备。
持久化文件应该保存在哪里?
建议保存在独立的磁盘分区或数据盘,避免与系统盘混用。同时定期备份到远程服务器或对象存储。
如何手动触发持久化?
RDB使用 bgsave 命令,AOF重写使用 bgrewriteaof 命令。两者都不会阻塞Redis主进程。
按照以上步骤配置后,即使服务器意外断电,Redis也能在重启后恢复大部分缓存数据。
建议先在测试环境验证,再应用到生产环境。