Redis——服务器

1,一个命令请求从发送到获得回复的过程中,客户端和服务器需要完成一系列操作。
第一步:发送命令请求,当用户在客户端中键入一个命令请求时,客户端将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器。
第二步:读取命令请求,当客户端与服务器之间的套接字因为客户端的写入而变得可读时,服务器将调用命令请求处理器来执行以下操作:
1)读取套接字中协议格式的命令请求,并将其保存到客户端状态的输入缓冲区里面
2)对输入缓冲区中的命令请求进行分析,提取出命令请求中包含的命令参数,以及命令参数的个数,然后分别将参数和参数个数保存到客户端状态的argv属性和argc属性里面。
3)调用命令执行器,执行客户端指定的指令。
2,命令执行器将会执行下面几项操作:
1)查找命令实现,命令执行器要做的第一件事就是根据客户端状态的argv[0]参数,在命令表中查找参数所指定的命令,并将找到的命令保存到客户端状态的cmd属性里面。
2)执行预备操作,在真正执行命令之前,程序还需要进行一些预备操作,从而确保命令可以正确、顺利地被执行。比如检查函数是否存在,参数是否正确等。
3)调用命令的实现函数
4)执行后续工作,比如如果服务器开起来慢查询日志功能,那么慢查询日志模块会检查是否需要为刚刚执行完的命令请求添加一条新的慢查询日志;如果服务器开启了AOF持久化功能,那么AOF持久化模块会将刚刚执行的命令请求写入到AOF缓冲区里面;如果有其他从服务器正在复制当前这个服务器,那么服务器会将刚刚执行的命令传播给所有服务器。
5)将命令回复发送给客户端
6)客户端接收并打印命令回复
3,serverCron函数
Redis服务器中的serverCron函数默认每隔100ms执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运转。这个函数会做:
1)更新服务器时间缓存,服务器状态中的unixtime属性和mstime属性被用作当前时间的缓存。每100毫秒更新一次,因此这个并不精确。对时间精度要求不高时使用这两个时间。对时间精度要求高时会执行系统调用。
2)更新LRU时钟,lruclock属性保存了服务器的LRU时钟,默认每10秒更新一次,这个和前面两个属性一样。这个lru属性保存了对象最后一次被命令访问的时间。
3)更新服务器每秒执行命令次数,serverCron函数中的trackOperationPerSecond函数会以100毫秒一次的频率执行,这个函数的功能是以抽样计算的方式,估算并记录服务器在最近一秒钟处理的命令请求数量。
4)更新服务器内存峰值记录,服务器状态中的stat_peak_memory属性记录了服务器的内存峰值大小。
5)处理SIGTERM信号,在启动服务器时,Redis会为服务器进程的SIGTERM信号关联处理器sigtermHandler函数,这个信号处理器负责在服务器接到SIGTERM信号时,打开服务器状态的shutdown_asap标识。每次serverCron函数运行时,程序都会对服务器状态的shutdown_asap属性进行检查,并根据属性的值决定是否关闭服务器。
6)管理客户端资源
7)管理数据库资源
8)执行被延迟的BGREWRITEAOF
9)检查持久化操作的运行状态,服务器状态使用rdb_child_pid属性和aof_child_pid属性记录执行BGSAVE命令和BGREWRITEAOF命令的子进程的ID,这两个属性也可以用于检查BGSAVE命令或者BGREWRITEAOF命令是否正在执行。
10)将AOF缓冲区的内容写入AOF文件
11)关闭异步客户端
12)增加cronloops计数器的值,这个属性记录了serverCron函数执行的次数
4,初始化服务器要做哪些步骤:
1)初始化服务器状态结构,初始化服务器的第一步就是创建一个struct redisServer类型的实例变量server作为服务器的状态,并为结构中的各个属性设置默认值。
2)载入配置选项,在启动服务器时,用户可以通过给定配置参数或者指定配置文件来修改服务器的默认配置。
3)初始化服务器数据结构,当初始化服务器进行到这一步,服务器将调用initServer函数,来初始化服务器数据结构。如果在执行initServerConfig函数时就对数据结构进行初始化,那么一旦用户通过配置选项修改了和数据结构有关的服务器状态属性,服务器就要重新调整和修改已经创建的数据结构。为了避免出现这种麻烦的情况,服务器选择了将server状态的初始化分为两步进行,initServerConfig函数负责初始化一般的属性,而initServer函数主要负责初始化数据结构。
4)还原数据库状态
5)执行时间循环

猜你喜欢

转载自blog.csdn.net/xiaoan08133192/article/details/115360339