redis系列之单线程模型

Posted 波爺ByTech

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis系列之单线程模型相关的知识,希望对你有一定的参考价值。


Redis是一种单线程机制的nosql 的key-value数据库,完全基于内存,数据可持久化落盘。由于单线程所以redis本身并没有锁的概念,多个命令同时到达redis时,会按时间顺序排队,同一时间redis只会处理一条命令。那么问题来了,这种单线程的情况下,为什么reids的性能还是如此之好?接下来将引入我们今天的正题来一查究竟。

本文的redis版本是3.2发布版,之前看文章好多人都提到redis.c文件,这个文件是redis启动主程入口,加载各项配置文件和初始化数据。搞的找了半天没找到,还以为下载的是假源码。原来新版本已经迁移到service.c中。

AE的异步网络框架

网络I/O模型最常用的无非是同步阻塞、同步非阻塞、异步阻塞、异步非阻塞,高性能网络服务器最常见的线程模型也就是基于EventLoop模式的单线程模型。redis自己封装了一套网络框架AE(事件驱动)框架,官方的文件描述:A simple event-driven programming library。根据不同的系统封装了不同的实现。我们看看Redis的网络架构:

ae.c封装了EventLoop事件轮训器包括对事件的所有操作。

  1. ae自己封装实现了多路复用IO模型,这部分分别对于不同平台提供了不同的实现,比如epoll和select可以用于linux平台、kqueue可以用于苹果平台、evpoll可以用于Solaris平台,这里并没有看到iocp,也就是Redis对于Windows支持并不是很好。

  2. 网络事件处理器实现的networking。


以上是关于redis系列之单线程模型的主要内容,如果未能解决你的问题,请参考以下文章

为什么 Redis 选择单线程模型

Redis的单线程模型怎么理解?

Redis的单线程模型怎么理解?

Redis03——Redis之单线程+多路IO复用技术

和Redis的线程模型做个“了结”

Redis线程模型