RDB: 指定的时间间隔能对你的数据进行快照存储.
AOF: 记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
(1)手动触发快照:
save (阻塞客户端发送的请求)
bgsave (异步创建快照)
(2)自动触发:
save 900 2 (服务器在900秒之内,对数据库至少进行了2次修改的话,就会执行 bgsave命令)
save 300 20 (服务器在300秒之内,对数据库至少进行了20次修改的话,就会执行 bgsave命令)
fork一个子进程, 子进程先共享父进程的数据;
当主进程数据有写入操作时, 触发copy on write , 此时给子进程分配物理空间,并将资源复制给子进程;
AOF(append only file): 记录redis操作的指令。会过滤掉无效指令;
AOF重写: 开辟一个子进程,对内存进行遍历,序列化到一个新的AOF日志文件
appendonly yes
#将 aof_buf缓冲区的所有内容写入并同步到AOF文件
appendfsync always
#将 aof_buf缓冲区的所有内容写入并同步到AOF文件,每秒执行一次
appendfsync everysec
#将 aof_buf缓冲区的所有内容写入到AOF文件,但何时同步由操作系统决定
appendfsync no
RDB 优点:
RDB缺点:
AOF优点:
AOF缺点 :
RDB会丢失部分数据,AOF日志重放要慢很多;
Redis4.0 为了解决这个问题, 采用了混合持久化的方式;
优点:混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,又降低了大量数据丢失的风险。