Redis serverCron函数
Redis服务器中的serverCron函数默认每隔100毫秒执行一次
更新服务器时间缓存
redisServer中的unixtime和mstime属性表示当前时间的缓存,serverCron每100毫秒更新unixtime属性和mstime属性,所以精确度不高
更新LRU时钟⏰
服务器状态中的lruclock属性保存了服务器的LRU时钟,每个Redis对象都会有一个lru属性,lru属性保存了对象最后一次被命令访问时间,当服务器要计算一个数据库键的空转时间,程序会用服务器的lruclock属性记录的时间减去对象的lru属性记录的时间,得出计算结果就是这个对象的空转时间
更新服务器每秒执行命令次数
serverCron函数的trackOperationsPerSecond函数每100毫秒执行一次,以抽样计算的方式,估算并记录服务器在最近一秒钟处理的命令请求数量
更新服务器内存峰值记录
redisServer的stat_peak_memory属性记录了服务器的内存峰值大小
每次serverCron函数执行时,程序都会查看服务器当前使用的内存数量,并与stat_peak_memory保存的数值进行比较,如果当前使用的内存数量比stat_peak_memory大,将当前使用的内存数量记录到stat_peak_memory中
处理SIGTERM信号
启动服务器时,redis会为服务器进程的SIGTERM信号关联处理器函数,这个服务器接到SIGTERM信号,打开服务器状态的shutdown_asap标识
serverCron对服务器状态的shutdown_asap属性进行检查,并根据属性的值决定是否关闭服务器
管理客户端资源
serverCron函数每次执行都会调用databasesCron函数,这个函数对服务器的一部分数据库进行检查,删除其中的过期键,并在有需要的时候,对字典进行收缩