持久化机制:RDB与AOF
快照RDB
RDB可能丢失数据,可以设置改1次key存一次,改10次,改1万次。RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来(操作系统会维护共享页面和修改后的分离页面),所以在快照持久化期间修改的数据不会被保存,可能丢失数据。
日志AOF
AOF不会丢失数据,但是数据多时文件很大,可以设置为改了就存、一秒存一次、不存几种策略。AOF存的是redis的顺序指令序列,长期运行的过程中AOF日志会变得很巨大,此时如果重放AOF日志会非常耗时。此时可以采取AOF重写,AOF重写就是开启一个子进程将内存遍历转换成一系列的redis操作指令序列化一个新的AOF日志文件中,然后再把转换期间的增量AOF日志追加到新的日志文件,然后替换原来的AOF文件即完成了AOF重写。写AOF文件时其实是写到一个内存缓存中然后异步地将脏数据刷新到磁盘,刷新频率一般为1s一次。
设置持久化的位置
RDB是遍历整个内存的操作,而AOF会降低redis性能,所以持久化一般发生在从节点(备份节点)进行,它没有来自客户端的压力。
混合持久化
redis4.0有一个混合持久化的方法,就是将RDB文件的内容和新增的AOF文件存在一起,这样既克服了AOF恢复慢,又克服了RDB容易丢失数据的缺点,redis重启时先加载RDB,后加载AOF,效率大幅度提升。