Redis启动概述
文章目录
Redis 启动的时候
./redis-server 0.0.0.0:6379
做了如下事情:
1. tcp 端口 和 unix socket 文件监控
2. 默认情况下设置一个100ms的定时器
可以通过配置文件的 hz 配置来修改这个值,默认是10,即每秒触发多少次
这个定时器是往 epoll 中注册超时事件来实现的,并不是开启额外的线程来实现
定时器主要做了如下事情:
1). 连接检查
2). Signal信号捕捉
3). aof,rdb 数据持久化处理(比如是否开子进程,子进程结束判断等)
4). 每5秒统计一次redis使用情况,比如连接数,总键值数
5). 尝试resize每个db,resize是让每个db的dict结构进入rehash状态,rehash是为了扩容dict或者缩小dict
6). 每秒RDB是否持久化刷盘
7). 每秒AOF是否持久化刷盘
8). 从库每秒判断是否要重新连接master及发送心跳给master
9). 其他任务
3. 从磁盘中恢复数据
假如 RDB 和 AOF 都同时开启了的情况下,只会加载 AOF 的数据
4. 启动2个子线程
Redis 所谓的单线程是指处理请求等事件,是只有一个单线程处理,并不是指 Redis 整个进程只有一个线程
Redis 额外起了2个子线程
第一个子线程的工作是 “ 调用flush从内核刷盘磁盘的线程 “
第一个子线程的工作是 “ close句柄的线程 “
对, 没有错, Redis 开了 一个线程专门用于 flush 数据到磁盘, 也专门开了一个线程close句柄
5. Redis eventLoop 死循环等待
在 Redis 所有初始化完之后,则进行事件循环处理上
文章作者 jc3wish
上次更新 2019-12-02