【学习笔记】Redis学习笔记——第14章 客户端

第14章 服务器

14.1 命令请求的执行过程

14.1.1 发送命令请求

客户端将发送的命令准换成协议格式然后发送给服务器

14.1.2 读取命令请求

1>保存命令至客户端状态输入缓冲区

2>提取命令参数及参数个数保存至客户端状态的argv与argc字段中

3>获取命令执行器并执行命令

14.1.3 命令执行器:查找命令实现

从命令字典中找到命令对应的函数及各种该命令相关的属性字段

13.1.4 命令执行器:执行预操作

检查命令正确性及验证客户端,内存大小等

13.1.5 命令执行器:调用命令的实现函数

执行cmd指向的命令并保存回复在客户端输出缓冲区

14.1.6 命令执行器:执行后续工作

1>如果需要,增加一条慢查询日志

2>更新redisCommand的命令总耗时写执行次数

3>AOF写入

4>主从复制

14.1.7 将命令回复发送给客户端

14.1.8 客户端接收并转化成可读格式

14.2 serverCron函数

每100毫秒执行一次

14.2.1 更新服务器时间缓存

防止过多的调用系统时间,为打印日志等任务每100ms更新系统时间缓存

14.2.2 更新LRU时钟

Lru时钟用于计算键的空转时间,默认10秒更新一次,使用每个redis对象的lru字段(最后一次使用时间)和这个时钟字段计算对象的空转时间。(也就是说空转时间不是严格精确的)

14.2.3 更新服务器每秒执行命令次数

通过抽样估算服务器每秒执行的命令次数

14.2.4 更新服务器内存峰值记录

每次执行时都将当前内存值与最大内存值比较并更新

14.2.5 处理Sigterm信号

该信号用于让周期函数检测关闭服务器标识,如果需要关闭,则进行RDB持久化操作后关闭服务器

14.2.6 管理客户端资源

1>释放超时客户端

2>重置超长的输入缓冲区

14.2.7 管理数据库资源

主要是删除过期键

14.2.8 执行被延迟的BGREWRITEAOF

当RDB持久化执行时,AOF重写会被推迟,如果有被推迟的AOF重写任务,则执行。

14.2.9 检查持久化操作的运行状态

1>若有AOF或RDB生成完毕,则进行后续的文件替换

2>若没有则查看是否有延迟的AOF重写、是否需要执行RDB持久化、是否需要执行AOF重写

14.2.10 将AOF缓冲区的内容写入AOF文件

根据配置有不同的写入时效要求

14.2.11 关闭异步客户端

关闭输出缓冲区大小超限制的客户端

14.2.12 增加cronloops计数器值

在执行serverCron N次之后可能会执行XX代码,所以记录了serverCron执行的次数

14.3 初始化服务器

14.3.1 初始化服务器状态结构

初始化ID、默认配置、命令字典表等

14.3.2 载入配置项选择

通过启动时设置或配置文件,修改各配置

14.3.3 初始化服务器数据结构

创建一些可通过配置修改的数据结构及共享对象、时间事件、AOF文件等

14.3.4 还原数据库状态

通过AOF或RDB来恢复数据库状态(优先AOF)

14.3.5 执行时间循环

开始执行serverCron函数

相关推荐
霍格沃兹测试开发学社测试人社区3 分钟前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
今天我又学废了19 分钟前
Scala学习记录,List
学习
幸运超级加倍~23 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
王俊山IT43 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
Mephisto.java1 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
Yawesh_best2 小时前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
武子康3 小时前
大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
大数据·人工智能·学习·算法·机器学习·数据挖掘
CXDNW3 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
使者大牙3 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型