1、Redis单线程模型初步理解
针对每次请求调用,Redis都需经历接受命令、执行命令和返回结果三个过程。其中,执行命令阶段,因Redis是单线程处理命令,于是每一条到达redis服务端的命令不会立刻执行,而是所有命令都进入一个队列中,然后逐个被执行。多个请求端发送来的命令的执行顺序是不确定的,但可以确定的是不会有两条命令被同时执行,也就是不会产生并发问题,以上便是Redis的单线程基本模型。
2、 详细描述
1、Redis 将每个客户端都分别关联一个指令队列;客户端的指令通过队列来按顺序处理,先到先服务。
2、一个客户端的指令队列中的指令是顺序执行的;多个指令队列中的指令是无法保证顺序的。如上图中,执行完 client-0 的队列中的 command-0 后,然后执行哪个队列中的第一个指令是不确定的,但可以肯定的是不会有两个指令同时执行。
3、同样,Redis 会为每个客户端关联一个响应队列,通过响应队列来顺序地将指令的返回结果响应给客户端。
补充说明:
1、一个响应队列中的消息可以顺序的回复给客户端,多个响应队列之间是无法保证顺序的。
2、所有的客户端的队列中的指令或者响应,redis 每次都只能处理一个,同一时间绝对不会处理超过一个指令或者响应。
3、为什么要使用单线程模型
1、单线程模型,可维护性更好,方便开发和调试。
2、单线程模型,能并发的处理客户端的请求。
3、Redis 服务中运行的绝大多数操作的性能瓶颈都不是 CPU,一般是网络带宽。
参考:
redis 单线程的理解 - myseries - 博客园
Redis 单线程模型介绍 - 五色风车 - 博客园
为什么 Redis 选择单线程模型 · Why's THE Design?(001) - 知乎