1.Redis 持久化方案
- RDB(Redis DataBase)
- AOF(Append Of File)
这里我们使用RDB
2. RDB概述
RDB在指定的时间间隔内将内存当中的数据集快照写入到磁盘当中,也就是 Snapshot
快照,恢复时将快照文件当中的内容读取到内存 当中。
3.实现RDB配置
dbfilename
Redis 当中的快照的文件是名为 dump.rdb
文件,这是默认的,建议不修改
dir
默认为 Redis 启动时命令行所在的目录下 ./ (建议修改为固定回档文件夹)
重点:在不同目录下启动 Redis 时,`./` 指向的路径会发生变化。例如,在 `/usr/local/bin` 目录下启动 Redis,`./` 指向 `/usr/local/bin`;而在 `/root/` 目录下启动 Redis,`./` 则指向 `/root/`。这种路径变化可能导致配置文件加载错误。例如,如果 Redis 配置文件路径为 `./redis.conf`,在 `/root/` 目录下启动时,实际加载的配置文件路径为 `/root/redis.conf`,而非预期的 `/usr/local/bin/redis.conf`。 所以建议修改为固定回档文件夹。
快照配置
手动备份命令
redis-cli bgsave Redis 会在后台异步进行快照操作,快照同时还可以响应客户端请求
redis-cli save save 时只管保存,其它不管,全部阻塞。手动保存,不建议
自动备份大部分情况下无法满足使用 建议手动备份
特殊配置 以下配置无特殊要求可以忽略
stop-writes-on-bgsave-error
- 意思是:当 Redis 无法写入磁盘的话(比如磁盘满了), 直接关掉 Redis 的写操作。推荐 yes
rdbcompression
- 对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis 会采用 LZF 算法进行压缩。
- 如果你不想消耗 CPU 来进行压缩的话,可以设置为关闭此功能,默认 yes。
rdbchecksum
- 在存储快照后,还可以让 redis 使用 CRC64算法来进行数据校验,保证文件是完整的。
- 但是这样做会增加大约 10% 的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能,推荐 yes 打开。
4.启动测试配置是否符合预期
redis-cli CONFIG GET dir
redis-cli CONFIG GET dbfilename
确认是否与你配置的一样,不一致可以参考dir配置重点项,或指定配置文件启动 redis-server /home/soft/redis-3.0.5/redis.conf &
5.RDB 备份&恢复
执行代码 获取必要信息
redis-cli CONFIG GET dir 需要恢复的地址{/path}
redis-cli CONFIG GET dbfilename 需要恢复的文件名称{filename}
将rdb文件修改为{filename} 放入{/path/}下,重启redis,查看数据恢复情况
注意:执行恢复前一定要执行这两行代码,获取准确信息,大部分情况下恢复不成功都是因为正确地址和预想的地址不一致,而不是配置又问题
6. RDB 优势 和 劣势
优势:
- 适合大规模的数据恢复
- 对数据完整性和一致性要求不高更适合使用
- 节省磁盘空间
- 恢复速度快
劣势:
- 虽然 Redis 在 fork 时使用了写时拷贝技术(Cop-On-Write) ,但是如果数据庞大时还是比较消耗性能。
- 在备份周期在一定间隔时间做一次备份,所以如果 Redis 意外 down 掉 的话(如果正常关闭 Redis仍然会进行 RDB 备份,不会丢失数据),就会丢失最后一次快照后的所有修改。