🔄Update: Redis
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# 线程模型
|
||||
|
||||
**主线程**
|
||||
|
||||
1. 接收请求
|
||||
2. 解析请求
|
||||
3. 执行请求
|
||||
|
||||
*使用一个主线程完成,但是不可以说 `Redis` 程序单线程的*
|
||||
|
||||
**后台线程**
|
||||
|
||||
- AOF刷盘线程
|
||||
- 关闭文件线程
|
||||
- 释放内存线程
|
||||
|
||||
*这些线程执行比较耗时,因此单独创建*
|
||||
|
||||
---
|
||||
|
||||
> Q: 为什么 Redis 只有一个主线程还可以这么快?
|
||||
>
|
||||
> A:
|
||||
> - 内存
|
||||
> - 多线程竞争
|
||||
> - I/O 多路复用
|
||||
@@ -0,0 +1,25 @@
|
||||
# 持久化
|
||||
|
||||
- AOF
|
||||
- 日志
|
||||
- RDB
|
||||
- 快照
|
||||
- 混合持久化
|
||||
|
||||
**AOF**
|
||||
|
||||
- 先执行命令 后写入日志
|
||||
- 避免检查开销
|
||||
- 不阻塞当前写操作的执行
|
||||
- 写回硬盘
|
||||
- `Always`
|
||||
- `Everysec`
|
||||
- `No`
|
||||
- 日志过大
|
||||
- `AOF` **重写**
|
||||
|
||||
**RDB**
|
||||
|
||||
- **写时复制技术**
|
||||
- 主线程写时保留一份副本
|
||||
- 后台线程使用副本数据
|
||||
@@ -0,0 +1,29 @@
|
||||
# 哨兵模式
|
||||
|
||||
**用途**
|
||||
|
||||
主节点故障时切换新主节点保证服务稳定性
|
||||
|
||||
---
|
||||
|
||||
**监控**
|
||||
|
||||
- 心跳机制
|
||||
- `PING/PONG`
|
||||
- 主观下线
|
||||
- 目标节点未能在规定时间内响应 `PING` 命令
|
||||
- 客观下线
|
||||
- 仅对于主节点
|
||||
- 多个哨兵报告主节点处于下线状态
|
||||
|
||||
**选举**
|
||||
|
||||
1. 判定主节点客观下线的哨兵成为Leader候选者
|
||||
2. 候选者发起投票
|
||||
3. 每位哨兵仅有一票,候选者可以投给自己
|
||||
4. 半数以上或配置的赞成票
|
||||
5. `Leader` 牵头执行主从切换
|
||||
|
||||
**通知**
|
||||
|
||||
通知其他 节点
|
||||
Reference in New Issue
Block a user