Redis的持久化主要有2个方式
RDB
- RDB: 定时快照方式(snapshoting)
- AOF: 基于语句追加文件的方式
RDB 文件非常紧凑,它保存了 Redis 某个时间点上的数据集。RDB 恢复大数据集时速度要比 AOF 快。但是 RDB 不适合那些对时效性要求很高的业务,因为它只保存了快照,在进行恢复时会导致一些时间内的数据丢失。实际在进行备份时,Redis 主要依靠 rdbSave()
函数,然后有两个命令会调用这个函数 SAVE
和 BGSAVE
,前者会同步调用,阻塞主进程导致会有短暂的 Redis-server 停止工作,后者会 fork 出子进程异步处理。
默认系统是开启snappshoting快照技术的,数据是有备份的。也可以手动备份bgsave
下面的意思就是15分钟内有一次key的改变就会自动备份 save N M 多少秒内有多少次key的改变
AOF (append only file)
快照备份的频率有时候不能够满足读写的需要,可以开启aof机制。补充快照技术的时间频率。
AOF 可以通过设置的 fsync 策略配置,如果未设置 fsync ,AOF 的默认策略为每秒钟 fsync 一次,在这种配置下, fsync 会在后台线程执行,所以主线程不会受到打扰。但是像 AOF 这种策略会导致追加的文件非常大,而且在恢复大数据时非常缓慢,因为要把所有会导致写数据库的命令都重新执行一遍。AOF文件中实际存储的是 Redis 协议下的命令记录,因此非常易读。当然 Redis 考虑到了 AOF 文件过大的问题,因此引入了 BGREWRITEAOF
命令进行重建 AOF 文件,保证可以减少大量无用的重复写操作。重建命令并不会去分析已有的 AOF 文件,而是将当前数据库的快照保存。
备份频率
默认是关闭的 appendonly yes 是开启 appendfsync (always,everysec,no) 改完之后重启redis服务 ok