Redis学习(三) —— 持久化

一、两个问题

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

1.1 为什么要持久化?

因为Redis数据存在内存,若服务器宕机或重启,数据会全部丢失,需要有一种机制保证数据不会因为故障丢失。

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

那么Redis是如何解决的?

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

1.2 如何持久化?

  • 快照
  • AOF日志

二、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机制了解一下
[5]: 10分钟彻底理解Redis的持久化机制:RDB和AOF

posted @ 2019-05-27 17:35 CoffeJoy 阅读(...) 评论(...) 编辑 收藏