目前来讲,redis有两种数据持久化的方式,分别是RDB和AOF。
一、RDB方式( Redis DataBase )
RDB的方式是redis在某个时间点将数据写入一个文件 dump.rdb,持久化数据集,再redis重启是使用dump.rdb文件进行数据恢复。他的优点是每间隔一段时间进行一次持久化,性能比较好,适合用来做数据备份。但一旦redis发生故障,距离上一次持久化时间的数据都会丢失,所以数据的备份不是那么严谨。相比于AOF,文件较小,恢复速度较快。
可以在redis中手动输入数据命令 save、bgsave 来持久化。
RDB默认是开启的,如果想关闭,配置文件中需要修改成 save ""。
或在redis-cli中输入 config set save "" 关闭。
默认备份规则为(可以自行修改):
save 900 1 ( 900秒内至少1个key值改变)
save 300 10 ( 300秒内至少10个key值改变)save 60 10000( 60秒内至少10000个key值改变)
二、AOF方式( Append-only file )
AOF是AppendOnly File的缩写,在AOF文件中记录了发生在redis的全部操作,在redis服务器重启之后,恢复之前数据的状态, AOF文件是能达到现有数据状态的最小的命令集合,是执行命令的“日志”。
AOF默认是关闭的 appendonly no,需要修改成 appendonly yes 开启。
或在redis-cli中输入 config set appendonly yes 开启。
redis中主要的aof设置:
①appendfsync no
redis不直接调用文件同步,是交给操作系统来处理,操作系统可以根据buffer填充情况/通道空闲时间等择机触发同步。性能比较好,但在服务器出现故障时,数据丢失量不确定。
②appendfsync everysec(默认,也是最佳的选择。)
redis会每隔一秒将缓冲区中的数据写到AOF文件中。但是当这一次的同步调用时长超过1秒时,Redis会采取延迟同步的策略,再等一秒钟。也就是在两秒后再进行同步,但这次同步是多次写操作的数据,一次性将日志写到AOF。
③appendfsync always
每一次写操作都会同步一次,数据是最安全的,但是性能也受到影响。
当然,也可以在redis中手动触发同步,输入 bgrewriteaof 命令。
总结:
① AOF 数据安全性高,同步文件更加及时,但需要更多的磁盘IO开支,文件尺寸较大,恢复速度较慢。
② RDB 数据安全性较差,是redis正常运行情况下数据备份以及主从数据同步的最佳方式,磁盘IO开支较小,文件尺寸较小,恢复数度较快。推荐使用方式:
①建议使用 master(AOF),slave(RDB),确保master数据完整性,slave提供读取服务。
②如果服务需要接收大量写操作,建议 master(RDB),slave(AOF),个人见解。