一直觉得关系型数据库非常难用,在使用之前要先定好表的结构,中途修改存储结构,改动就会非常繁杂,特别是 外键
这玩意离开了学校就再也没见过。好在在 游戏领域
中,用的最多的都是 NoSQL
。
熟悉我风格的人,可以看出这个系列的标题,不再是 源码剖析
,而是只有 剖析
两字,主要是考虑到 Redis 6.0
的代码量已经挺大了,同时网络中又有大量关于 Redis
数据结构的源码剖析,没必要再炒冷饭了。
出于以上的原因,我将 Redis
分为几个部分进行剖析和讨论。
- 异步机制
- 主从同步
- 集群
- 数据结构
本篇主要是来剖析 Redis
为了避免 阻塞
,是如何运用 多进程
与 多线程
,这两种异步机制的。
阻塞点
Redis
一般有以下几种阻塞的点。
从网络交互来看有
- 网络 I/O (多线程)
- 客户端交互 (部分删除用多线程
BIO
) - 传输 RDB 快照 (多进程)
从磁盘交互又分
- 关闭文件 (多线程
BIO
) - 记录 AOF 日志 (多线程
BIO
) - AOF 日志重写 (多进程)
- RDB 快照生成 (多进程)