redis—serverCron介绍
what:
serverCron:
serverCron函数是管理Redis服务器资源的,是Redis良好运行的保证。
serverCron和RedisServer的关系:
它们的关系就是:serverCron函数是通过更新RedisServer对象的的变量来进行管理Redis服务器的资源。
redisServer结构如下:
redisServer{
unixtime:秒级(缓存)
mstime:毫秒级(缓存)
lruclock:用来记录当前时间的(缓存)。每10秒更新一次,因此这个值是模糊的。
stat_peak_memory:已使用的内存峰值。可以用info memory查看,这个可以用来作为内存淘汰机制触发的依据。
shutdown_asap:关闭服务器的标识。每次serverCron函数运行时,都会对这个shutdown_asap进行检查,看是否要关闭服务器。shutdown命令可修改shutdown_asap的状态值
clientsCron函数:用来管理客户端资源。比如检查客户端和服务端的连接是否超时。客户端的输入缓冲区是否耗费过多内存
databasesCron函数:检查过期建,并删除
rdb_child_pid:检查持久化操作的运行状态。如下
aof_child_pid:检查持久化操作的运行状态。如下
...省略,其他细节的可以自行去看redis的源码
}
上面是redisServer结构,转换成java,其实redisServer就是一个对象,下面维护着一堆变量,这些变量,其实就是redis服务器的各种身体指标。然后通过serverCron函数来定期更新各个身体指标,serverCron函数就类似一个定时体检。大概就是100毫秒检查一次,也就是1秒检查10次。
How:
serverCron函数具体是做了什么?
1、更新服务器的各类统计信息;
2、清理数据库中的过期键值对,这个可以具体分为惰性删除和定时删除;
3、关闭和清理连接失效的客户端,为了不浪费内存资源;
4、尝试进行AOF或RDB持久化操作;
5、同步数据。如果服务器是主服务器,还需要对从服务器进行定期同步;
6、心跳检测。如果处于集群模式,对集群进行定期同步和连接测试;