核心架构
当你熟悉我的整体架构和每个模块,遇到问题才能直击本源,直捣黄龙,一笑破苍穹。
我的核心模块如图 1-10。
图1-10
- Client 客户端,官方提供了 C 语言开发的客户端,可以发送命令,性能分析和测试等。
- 网络层事件驱动模型,基于 I/O 多路复用,封装了一个短小精悍的高性能 ae 库,全称是
a simple event-driven programming library
。
在 ae 这个库里面,我通过 aeApiState
结构体对 epoll、select、kqueue、evport
四种 I/O 多路复用的实现进行适配,让上层调用方感知不到在不同操作系统实现 I/O 多路复用的差异。
Redis 中的事件可以分两大类:一类是网络连接、读、写事件;另一类是时间事件,比如定时执行 rehash 、RDB 内存快照生成,过期键值对清理操作。
- 命令解析和执行层,负责执行客户端的各种命令,比如
SET、DEL、GET
等。 - 内存分配和回收,为数据分配内存,提供不同的数据结构保存数据。 <