问题:

    Redis属于单线程模式,为何可以处理高并发?


答:使用操作系统的多进程机制。也就是我们常说的,多路复用API,多路复用API本质上是对操作系统多路复用功能的封装。

操作系统的多进程

简单来说就是Copy On Write。当父进程对redis页面进行修改时,会先把这个页面的数据复制一份,然后在这个副本上进行修改,子进程读取的还是原来的页面,并且这个页面不会被修改,所以子进程可以放心的处理自己的事情,进行数据持久化操作。这就是为什么RDB持久化也叫做快照的原因。

接下来还有一个问题要搞清楚,就是linux系统的父子进程的关系,因为我们还没有很好的解释:单线程的linux如何解决并发请求。

一个线程只能属于一个进程,但是一个进程可以fork生成多个子进程,这就是redis单线程能够处理多个并发请求的原因。

也就是说,redis的设计者,把多线程的复杂性,转给了操作系统。在redis层面,无需考虑多线程问题。