Subject
Introduction:收纳专题相关的知识总结!
[TOC]
# Redis
## 线程模型
Redis内部使用文件事件处理器File Event Handler,这个文件事件处理器是单线程的所以Redis才叫做单线程的模型。它采用I/O多路复用机制同时监听多个Socket,将产生事件的Socket压入到内存队列中,事件分派器根据Socket上的事件类型来选择对应的事件处理器来进行处理。文件事件处理器包含5个部分:
- 多个Socket
- I/O多路复用程序
- Scocket队列
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
客户端与redis的一次通信过程:

- **请求类型1**:`客户端发起建立连接的请求`
- 服务端会产生一个AE_READABLE事件,IO多路复用程序接收到server socket事件后,将该socket压入队列中
- 文件事件分派器从队列中获取socket,交给连接应答处理器,创建一个可以和客户端交流的socket01
- 将socket01的AE_READABLE事件与命令请求处理器关联
- **请求类型2**:`客户端发起set key value请求`
- socket01产生AE_READABLE事件,socket01压入队列
- 将获取到的socket01与命令请求处理器关联
- 命令请求处理器读取socket01中的key value,并在内存中完成对应的设置
- 将socket01的AE_WRITABLE事件与命令回复处理器关联
- **请求类型3**:`服务端返回结果`
- Redis中的socket01会产生一个AE_WRITABLE事件,压入到队列中
- 将获取到的socket01与命令回复处理器关联
- 回复处理器对socket01输入操作结果,如ok。之后解除socket01的AE_WRITABLE事件与命令回复处理器的关联
### 效率高
- `纯内存操作`:数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别访问的重要基础
- `非阻塞的I/O多路复用机制`:Redis采用epoll做为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间
- `C语言实现`:距离操作系统更近,执行速度会更快
- `单线程避免切换开销`:单线程避免了多线程上下文切换的时间开销,预防了多线程可能产生的竞争问题
## 数据结构
## 热点数据
## 双写一致性
如何保证缓存和数据库的双写一致性?
## 缓存问题
### 缓存雪崩
### 缓存击穿
### 缓存穿透
# Netty
## 线程模型
## 单机支持百万连接
## 长连接心跳保活机制
## 时间轮
# MySQL
## 数据结构
## 内存设计
## 索引设计
# RocketMQ
# Thread Pool
# Register
## 多数据中心方案
## 百万服务访问
# 问题定位
## CPU飙高
## 内存飙高
## 频繁GC
## 死锁
# 服务治理
## 限流
### 固定时间窗口
### 滑动时间窗口
### 漏桶算法
### 令牌桶算法
### 分布式限流
## 熔断
## 降级