Appearance
第10章:Redis 持久化(防止数据丢失,核心)
10.1 持久化的意义
Redis是基于内存的数据库,所有数据默认存储在内存中。当Redis服务重启时,内存中的数据会全部丢失。持久化机制可以将内存中的数据保存到磁盘,确保数据不会因为服务重启而丢失,是生产环境中必须配置的核心功能。
10.2 两种持久化方式
RDB(快照持久化)
RDB是Redis默认的持久化方式,通过创建内存数据的快照来实现持久化。
触发方式
手动触发:
SAVE:同步执行,会阻塞Redis服务器,直到快照创建完成BGSAVE:异步执行,会fork一个子进程来创建快照,不阻塞主进程
示例:
bash# 手动触发快照(同步) SAVE # 手动触发快照(异步) BGSAVE自动触发:在redis.conf配置文件中设置
txt# 900秒内有1个键被修改时触发 save 900 1 # 300秒内有10个键被修改时触发 save 300 10 # 60秒内有10000个键被修改时触发 save 60 10000
优点与缺点
- 优点:
- 恢复速度快,直接加载快照文件
- 对性能影响小,只有在创建快照时会有短暂影响
- 适合用于备份和灾难恢复
- 缺点:
- 可能丢失最近一段时间的数据(从上次快照到服务重启之间的数据)
- 大内存实例创建快照可能会导致服务短暂阻塞
AOF(Append Only File)
AOF通过记录所有写命令来实现持久化,重启时通过重新执行这些命令来恢复数据。
配置方式
开启AOF:在redis.conf中设置
txtappendonly yes设置同步频率:
always:每次写命令都同步到磁盘,最安全但性能最差everysec:每秒同步一次,平衡安全性和性能(默认)no:由操作系统决定何时同步,性能最好但安全性最差
配置示例:
txtappendfsync everysec
优点与缺点
- 优点:
- 数据安全性高,最多丢失1秒的数据
- 日志文件可读性好,可手动修复错误命令
- 缺点:
- 文件体积大,占用更多磁盘空间
- 恢复速度慢,需要重新执行所有命令
- 对性能影响较大,特别是使用
always同步策略时
10.3 RDB与AOF对比与选择
| 特性 | RDB | AOF |
|---|---|---|
| 持久化方式 | 快照 | 命令日志 |
| 数据安全性 | 较低(可能丢失数据) | 较高(最多丢失1秒数据) |
| 恢复速度 | 快 | 慢 |
| 文件大小 | 小 | 大 |
| 对性能影响 | 小(仅在快照时) | 较大(每次写操作) |
新手推荐:生产环境可开启混合持久化(Redis 4.0+支持),结合RDB和AOF的优点:
txt
# 开启混合持久化(Redis 4.0+)
aof-use-rdb-preamble yes10.4 实操案例
案例1:配置并测试RDB持久化
- 修改配置文件:txt
# 设置RDB文件名称
dbfilename dump.rdb
设置RDB文件存储路径
dir /var/lib/redis
设置自动触发条件
save 900 1 save 300 10 save 60 10000
2. **手动触发并验证**:
```bash
# 连接Redis
redis-cli
# 设置一些测试数据
SET name "zhangsan"
SET age 25
# 手动触发BGSAVE
BGSAVE
# 查看RDB文件是否生成
ls -la /var/lib/redis/dump.rdb- 测试数据恢复:bash
# 停止Redis服务 sudo systemctl stop redis # 启动Redis服务 sudo systemctl start redis # 连接Redis并验证数据 redis-cli GET name # 应该返回 "zhangsan" GET age # 应该返回 "25"
案例2:配置并测试AOF持久化
修改配置文件:
txt# 开启AOF appendonly yes # 设置AOF文件名称 appendfilename "appendonly.aof" # 设置同步频率 appendfsync everysec # 设置AOF重写触发条件 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb验证AOF文件:
bash# 连接Redis并设置数据 redis-cli SET foo bar SET counter 1 INCR counter # 查看AOF文件内容 cat /var/lib/redis/appendonly.aof测试AOF重写:
bash# 手动触发AOF重写 BGREWRITEAOF # 查看重写后的文件大小 ls -lh /var/lib/redis/appendonly.aof
10.5 AOF文件修复
如果AOF文件损坏,可以使用Redis提供的修复工具:
bash
# 修复AOF文件
redis-check-aof --fix /var/lib/redis/appendonly.aof新手易错点
- 未开启持久化:导致服务重启后数据全部丢失
- AOF文件过大未清理:占用过多磁盘空间,影响性能
- 持久化配置错误:如同步频率设置不合理,导致性能问题或数据丢失
- 混合持久化未开启:无法充分利用两种持久化方式的优点
- 未定期备份:即使开启了持久化,也应该定期备份RDB或AOF文件
