redis 持久化策略:
RDB:对redis中的数据周期性的持久化
优点:1、会生成多个数据文件,每个数据文件都代表了某一个时间的全部数据。非常适合做冷备。可以将数据上传到云服务备份。
2、RDB对redis对外提供的服务影响小,可以让redis保持高性能。
3、相比较来说,基于RDB文件重启恢复redis更快
AOF:对每条写入命令作为日志。以append-only模式写入日志。
优点:1、可以更好的保护数据不丢失,一般AOF每隔1秒,通过后台线程执行一次fsync操作。最多丢失1s数据
2、文件以append-only模式写入,没有io开销。文件不容易损坏。损坏也很容易恢复。
3、AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。因为在rewrite log的时候,会对其中的指导进行压缩,创建出一份需要恢复数据的最小日志出来。再创建新日志文件的时候,老的日志文件还是照常写入。当新的merge后的日志文件ready的时候,再交换新老日志文件即可。
4、日志文件可读性强。适合做灾难性的误删除的紧急恢复。
一般线上环境我们会将2中机制都开启。具体的RDB策略和AOF策略都可以在redis.conf里面配置
RDB: save 60 1000 : 表示每60s有超过1000条数据更新就备份。
AOF: append-only : true 开启aof策略
everysec: 每秒备份
auto-aof-rewrite-percentage 100 : 当aof大小膨胀到上次2倍就备份
auto-aof-rewrite-min-size 64mb : 和上面是 且 关系。 aof文件必须超过64m才会备份
通过RDB恢复数据的步骤:
先将云服务的RDB备份数据copy到redis配置的备份目录。然后将aof关闭(一定要关闭,否则优先从aof日志文件本分,但是如果没有的话就创建空的。所以redis是无法加载rdb备份文件的)。然后重启redis,此时我们redis-cli 进入redis发现redis已经自动加载备份的rdb文件数据了。这时候手动命令启动aof。这时候redis就会备份aof日志。这启动aof是暂时的。我们停掉redis,在配置文件中修改将aof开启,然后再开启,现在redis已经恢复数据,且AOF已经开启了。