参考这篇1
参考这篇2
持久化有两种方式:rdb和aof。
rdb就是生成某个时间点快照,有异步bgsave和同步save,同步的话肯定不能对外服务了,异步是通过fork子进程完成的,需要注意的是,在异步的时候,数据可能发生变化,redis并不是直接复制一份进行复制,redis运用写时复制cow思想,即一开始redis和子进程都指向同一个数据,当某个key改变时redis主进程指向新的,子进程不变。
AOF就是追加每次写命令到文件中。持久化有3中方式,一种是no由操作系统决定何时刷到磁盘,一种是always,每次写完命令就调用fsync()刷到磁盘,一种是everysec,每秒刷一次到磁盘。 no操作系统决定的是异步,always每条命令都要马上写到磁盘,同步的,ererysec每秒一次异步的,额外注意的是AOF有个重写机制,即重新整理命令去掉一些已经无效的命令,比如写完又删了就没必要保留这命令了, 重写是异步的通过fork子进程完成。