Redis学习(三) —— 持久化

1、两个问题

  • 为何要持久化
  • 如何持久化

1.1 为何要持久化?

由于Redis数据存在内存,若服务器宕机或重启,数据会所有丢失,须要有一种机制保证数据不会由于故障丢失。html

Redis是单线程的,而持久化就是说Redis须要将线程用到保存数据到磁盘,而且还要服务客户端的请求,持久化的IO会严重影响性能。面试

那么Redis是如何解决的?redis

这里Redis使用了操做系统的 写时复制(Copy On Write)。也就是从原先处理客户端请求的进程中,fork出一个子进程,来进行持久化。数据库

1.2 如何持久化?

  • 快照
  • AOF日志

2、Copy On Write

fork()函数

父进程执行fork()后,会产生一个子进程。当fork()被调用的时候,会返回两个值。缓存

为何返回两个值?
由于是两个线程,返回给父线程,子线程的ID;返回给子线程,0。服务器

exec()函数

exec的做用是,替换当前进程的内存空间的映像,从而执行不一样的任务。函数

也就是说,当子进程执行exec后,就再也不是父进程的副本了,由于有了独立的内存空间。性能

Copy On Write

参考文档

[1]: Redis官方文档 持久化(persistence)
[2]: 一个经典面试题:如何保证缓存与数据库的双写一致性?
[3]: 你的Redis怎么持久化的
[4]: COW奶牛!Copy On Write机制了解一下操作系统

相关文章
相关标签/搜索