持久化的方式分为2种,一种是RDB,一种是AOF
RDB是指快照:在满足某个条件下,将内存中的数据罗盘,生成磁盘文件dump.rdb
1、自动触发条件
配置了策略,多久备份一次
执行正常关闭shutdown
执行flushall
2、手动触发
save阻塞主线程,bgsave:fork子进程去备份数据,不阻塞主线程
3、怎么备份
新起子进程,把redis的数据写到临时文件中,再去替代dump.rdb
优势:备份与恢复数据快,起子进程去做
缺点:安全性低,容易丢失数据
AOF:追加指令文件,默认是关闭的,如果开启的话,默认就用AOF恢复
默认1s执行一次,最多丢失1s的数据,追加会导致文件越来越慢,会有重写机制,将大文件变小,例如incr 1000,就会有1000条指令,重写就是把当前内存的数据以RDB形式写下来,之前的数据删除,重写的时候内存最新的数据使用rdb的方式,后续追加的指令到aof文件
什么时候触发重写:默认配置是文件大于64mb的重写一次,下次重写是上次的2倍
例如重写64M--重写后40M---下次重写必须是80M
优点:安全性高,最多只丢失1s数据,里面都是指令,可读性高,
缺点:持久化和恢复比rdb慢,文件比rdb大,与磁盘进行两次io,一个是写入老的aof,一个是写入新的aof,7.0以前内存大量使用