笔者:单大
有任何疑问欢迎关注微信公众号:网易游戏运维平台。(长按识别上图二维码)
微信公众号原文链接:
Redis 核心原理:基于事件的处理流程
Redis 核心原理:基于事件的处理流程
本文介绍了 Redis 核心原理和架构:基于事件驱动的模型。事件模型是构成 Redis 内核的引擎,Redis 的丰富功能和组件都是构建在这个模型上的。如果你使用过 Redis,那么本文可以为你打开一道进入 Redis 内部世界的门,窥探 Redis 如何构建它的帝国。
本文先对 Redis 使用的事件模型和原理进行介绍,然后按以下主题顺序展开:
- Redis 主程序启动流程
- 事件循环(eventloop)
- 事件处理器 (event handler)
- 事件处理流程
最后以一次客户端
SET
命令操作为例子,讲解一个请求在 Redis 内部的流转是如何完成的。
阅读之前
为了方便公众号上进行阅读,帮助读者快速掌握 Redis 核心原理,本文对 Redis 模型进行了简化,去掉了大量的检查和异常处理流程,并且仅在必要的时候通过代码说明。
本文参考的源码基于编写时的最新分支 Redis 5.0.3,实际对照中发现 Redis 的核心逻辑在历史版本迭代中变化不大,也体现了 Redis 的这个核心逻辑的地位。
文章目录
一、Redis 事件驱动模型
1.1 事件驱动模型
事件驱动
,顾名思义,只有在发生某些
事件
的时候,程序才会有所行动。
事件驱动模型在架构设计领域也称为 Reactor 模式,体现的是一种被动响应的特征。
事件驱动模型通常可以抽象为如下图所示流程:
主程序处于一个阻塞状态的事件循环 (event loop)中等待事件 (event),当有事件发生时,根据事件的属性分发到相应的处理函数进行处理。事件以并发的方式发送到服务处理器 (service handler),服务处理器将事件整合到一个有序队列中(这过程称为 demultiplexes),并分发到具体的请求处理器 (request handler)进行处理。
为了阅读的方便,因为“事件”这个词在中文中较常见,所以下文针对事件模型中的“事件”等专用术语,会进行特定的标识,如:
事件循环 (event loop)
,
事件 (event)
,
处理器 (handler)
等。
1.2 Redis 核心原理
Redis 在事件驱动模型下工作,当有来自外部或内部的请求的时候,才会执行相关的流程。
Redis 程序的整个运作都是围绕
事件循环 (event loop)
进行的。
事件循环
对于Redis 而言,就像是一台车的引擎一样,提供了整个系统所需的流转动力。所有其他的组件都是基于这个引擎的基础上组合和构建起来的。可以说理解了 Redis 的
事件循环
就能了解 Redis 的工作原理的核心。
Redis 事件模型如下图所示: