redis服务器单机数据库的实现

Redis命令请求的执行过程:

1.发送命令请求
客户端将命令请求转换成协议格式,通过连接到服务器的套接字发送给服务器。

2.读取命令请求
1)读取套接字协议格式的请求,保存到客户端状态的缓冲输入区。
2)分析缓冲区命令,提取命令参数及个数,分别保存到客户端状态的argv属性和argc属性。
3)调用命令执行器。

3.命令执行器

1)查找实现命令:根据客户端状态的argv[0]参数,查找参数指定的命令,保存到客户端状态的cmd属性。
2)执行预备操作:检查客户端cmd属性指向、参数个数、身份验证是否合法等等一系列服务器和客户端状态的校验。
3)调用命令的实现函数:函数调用产生setCommand(client)将产生一个 “+OKrn” 回复,保存到客户端的buf属性。
4)执行后续工作:根据配置执行相应操作,例如慢查询日志、AOF持久化、主从服务。

4.将命令回复发送给客户端:将协议格式的命令回复 +“OKrn”发送给客户端。
5.客户端接收并打印命令回复:将协议回复的 “OKrn” 转换成 “OKn” 打印给用户。

Redis服务器中serverCron函数每隔100ms执行一次,该函数负责管理服务器资源并保持服务器良好运转。

  • 更新服务器时间缓存
  • 更新LRU时钟
  • 更新服务器每秒执行命令次数
  • 更新服务器内存峰值记录
  • 处理SIGTERM信号
  • 管理客户端资源
  • 管理数据库资源
  • 执行被延迟的BGREWRITEAOF
  • 检查持久化操作的运行状态
  • 将AOP缓冲区内容写入AOF文件
  • 关闭异步客户端
  • 增加cronloops计数器的值