由于Redis数据存在内存,若服务器宕机或重启,数据会所有丢失,须要有一种机制保证数据不会由于故障丢失。html
Redis是单线程的,而持久化就是说Redis须要将线程用到保存数据到磁盘,而且还要服务客户端的请求,持久化的IO会严重影响性能。面试
那么Redis是如何解决的?redis
这里Redis使用了操做系统的 写时复制(Copy On Write)。也就是从原先处理客户端请求的进程中,fork出一个子进程,来进行持久化。数据库
父进程执行fork()后,会产生一个子进程。当fork()被调用的时候,会返回两个值。缓存
为何返回两个值?
由于是两个线程,返回给父线程,子线程的ID;返回给子线程,0。服务器
exec的做用是,替换当前进程的内存空间的映像,从而执行不一样的任务。函数
也就是说,当子进程执行exec后,就再也不是父进程的副本了,由于有了独立的内存空间。性能
[1]: Redis官方文档 持久化(persistence)
[2]: 一个经典面试题:如何保证缓存与数据库的双写一致性?
[3]: 你的Redis怎么持久化的
[4]: COW奶牛!Copy On Write机制了解一下操作系统