redis根据数据的更新量和间隔时间定期将数据刷新到存储中,相当于做checkpoint。
通过系统调用fork的copy-on-write的方式实现内存的拷贝,保证刷数据时的一致性。
但是如果在刷数据期间数据发生大量变化,可能会造成内存的大量copy-on-write,引起系统内存拷贝的负载变化。
逻辑:
1.主进程调用fork 。
2.子进程关闭listen fd ,开始刷数据到存储。
3.主进程调整策略,减少内存数据更改。
redis的这种策略并不能保证数据可靠性,没有write ahead日志,异常情况数据可能会丢失。
因此redis加入了append only的日志文件,以保证数据可靠,但是每次数据更新都写日志的做法使得日志文件增长很快,redis使用跟刷数据类似
的方式后台整理这个日志文件。
注:目前的数据库一般通过write ahead日志保证数据可靠性,但是这种日志也不是实时刷新,而是写到buffer中,被触发刷新到文件。