pull/1/head
595208882@qq.com 3 years ago
parent df54721383
commit dc40702acb

@ -0,0 +1,141 @@
<div style="color:#16b0ff;font-size:50px;font-weight: 900;text-shadow: 5px 5px 10px var(--theme-color);font-family: 'Comic Sans MS';">Subject</div>
<span style="color:#16b0ff;font-size:20px;font-weight: 900;font-family: 'Comic Sans MS';">Introduction</span>:收纳专题相关的知识总结!
[TOC]
# Redis
## 线程模型
Redis内部使用文件事件处理器File Event Handler这个文件事件处理器是单线程的所以Redis才叫做单线程的模型。它采用I/O多路复用机制同时监听多个Socket将产生事件的Socket压入到内存队列中事件分派器根据Socket上的事件类型来选择对应的事件处理器来进行处理。文件事件处理器包含5个部分
- 多个Socket
- I/O多路复用程序
- Scocket队列
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
客户端与redis的一次通信过程
![Redis请求过程](images/Subject/Redis请求过程.png)
- **请求类型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
## 死锁
# 服务治理
## 限流
### 固定时间窗口
### 滑动时间窗口
### 漏桶算法
### 令牌桶算法
### 分布式限流
## 熔断
## 降级

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Loading…
Cancel
Save