服务器相关属性在服务器运行过程当中扮演着重要的角色,他们会与服务器相关函数结合起来,共同维护服务器的正常运行。如下是服务器相关属性的具体描述。数据库
cronloops 属性是一个计数器,用于记录服务器的 serverCron 函数被执行的次数,是一个 int 类型的整数。每执行一次serverCron函数,cronloops属性的值就加1。后端
serverCron函数是Redis服务器中的一个重要函数,默认状况下,每隔100毫米就执行一次,它负责管理服务器的资源,并维持服务器的正常运行。缓存
rdb_child_pid 和 aof_child_pid 属性用于检查 Redis 服务器持久化操做的运行状态,它们记录执行 BGSAVE 和 BGREWRITEAOF 命令的子进程的 ID。也经常使用这两个属性来判断 BGSAVE 和 BGREWRITEAOF 命令是否正在被执行。服务器
(BGSAVE用于Redis服务后端采用异步的方式将数据保存到当前数据库的磁盘中,在执行命令后会返回OK,以后Redis启动一个新的子进程,原来的Redis进程(父进程)继续执行客户端请求命令,而子进程负责将数据保存到磁盘中,而后退出。异步
BGREWRITEAOF命令用于执行一个AOF文件的重写操做)ide
当执行 serverCron 函数时,会检查 rdb_child_pid 和 aof_child_pid 属性的值,只要其中一个属性的值不等于-1,程序就会调用一次 wait3 函数来判断子进程是否发送信号到服务器中。若是没有信号到达,则表示服务器持久化操做没有完成,程序不作任何处理。而若是有信号到达,那么,针对 BGSAVE 命令,表示新的 RDB 文件已经成功生成,针对 BGREWRITEAOF 命令,表示新的 AOF 文件生成完毕,而后服务器继续执行相应的后续操做。好比,将旧的 RDB 文件或 AOF 文件替换为新的 RDB 文件或 AOF 文件。函数
另外,当 rdb_child_pid 和 aof_child_pid 属性的值都为-1 时,表示此时的服务器没有执行持久化操做,这时程序会作出以下判断。oop
(1)判断 BGREWRITEAOF 命令的执行是否被延迟了,若是被延迟了,则从新执行一次 BGREWRITEAOF 命令。spa
(2)判断是否知足服务器的自动保存条件。若是知足服务器的自动保存条件,而且服务器没有执行其余持久化操做,那么服务器将开始执行 BGSAVE 命令。unix
(3)判断是否知足服务器设置的 AOF 重写条件。若是条件知足,同时服务器没有执行其余持久化操做,那么服务器将从新执行 BGREWRITEAOF 命令。
stat_peak_memory 属性用于记录Redis服务器的内存峰值大小,在每次执行serverCron函数时,程序都会检查服务器当前内存的使用状况,并与stat_peak_memory属性保存的上一次内存峰值大小进行比较,若是当前的内存峰值大小大于stat_peak_memory属性保存的值,就将当前最新的内存峰值大小赋给stat_peak_memory属性。
在执行info memory命令后,返回的used_memory和used_memory_human属性分别以两种格式记录了服务器的内存峰值大小。
lruclock 属性是一种服务器时间缓存,它记录了服务器的 LRU 时钟。在默认状况下,serverCron 函数会以每 10 秒一次的频率更新 lruclock 属性的值。LRU 时钟不是实时的,它只是一个模糊的估计值。Redis 的每一个对象都有一个 lru 属性,该属性记录了这个对象最后一次被命令访问的时间。使用 lruclock 属性的值减去 lru 属性的值,就能计算出这个对象的空转时间。
可使用 INFO server 命令的 lru_clock 属性来查看当前 LRU 时钟的时间
mstime 和 unixtime 属性记录了服务器当前的时间。在默认状况下,serverCron 函数会以每 100 毫秒一次的频率更新 mstime 和 unixtime 属性,它们记录的时间值并非最准确的。
aof_rewrite_scheduled 属性用于记录服务器中 BGREWRITEAOF 命令执行是否被延迟。当 aof_rewrite_scheduled 属性的值为 1 时,表示执行 BGREWRITEAOF 命令超时了。
在服务器执行 BGSAVE 命令时,若是客户端发送了 BGREWRITEAOF 命令请求,那么服务器在接收到命令请求以后,会将 BGREWRITEAOF 命令延迟到 BGSAVE 命令执行成功后再执行。
在每次执行serverCron函数时,都会判断BGSAVE和BGREWRITEAOF命令是否正在被执行,若是他们没有被执行,同时aof_rewrite_scheduled属性值为1,那么被延迟的BGREWRITEAOF命令将会被执行。