Redis第14章 服务端
2020-12-27 本文已影响0人
Oliver_Li
- Redis服务端主要负责与多个客户端通信、处理请求、维持自身运转。
14.1 命令请求的执行过程
- 读取套接字中发过来的命令,保存到缓冲区(中间还包括协议的序列化、反序列化等)
- 对请求进行分析,包括命令表查询指定命令、检查参数等预备工作
- 执行指令、产生回复到输出缓冲区
- 善后工作包括慢日志记录、执行计数器+1、AOF记录、从服务器同步等工作
- 输出缓冲区的消息回复客户端
14.2 serverCron函数
-
serverCron
在服务端每100ms执行一次,可以说是Redis服务端的核心函数,每次需要执行以下任务。 - 更新服务器时间缓存:服务端分别保存了
秒
和毫秒
两个属性,用于打印日志,更新LRU时钟等不需要高精度的任务
。需要高精度时间的会获取精确时间。 - 更新LRU时钟:也是时间缓存,用于计算对象空转时间,LRU用于资源紧张时根据空转时间删除对象,所以不用太精确。
- 更新命令执行次数:服务端会估计每秒的执行命令数量。
- 更新服务器内存峰值。
- 处理SIGTERM信号:用于判断是否需要关闭的信号。
- 管理客户端资源:判断客户端是否超时需要关闭、查看输入缓冲区是否超过范围判断是否需要释放。
- 管理数据库资源:删除过期键,之前提到的主动删除。
- 执行被延迟的BGREWRITEAOF。
- 如果有待写入AOF数据,则写入。
- 更新cronloops,这个属性用于记录serverCron的执行次数。
14.3 初始化服务器
- 主要就是初始化服务器状态、载入用户的配置、初始化数据库结构、还原数据库状态(有AOF用AOF,没有用RDB)