RDB的dirty计数器和lastsave属性
服务器除了维护saveparams数组之外,还维持着一个dirty计数器,以及一个lastsave属性:
- 1.dirty计数器记录距离上一次成功执行SAVE命令或者BGSAVE命令之后,服务器对数据库状态(服务器中的所有数据库)进行了多少次修改(包括写入、删除、更新等操作)
- 2.lastsave属性是一个UNIX时间戳,记录了服务器上一次成功执行SAVE命令或者BGSAVE命令的时间
struct redisServer {
// ...
// 修改计数器
long long dirty;
// 上一次执行保存的时间
time_t lastsave;
// ...
}
当服务器成功执行一个数据库修改命令之后,程序就会对dirty计数器进行更新:命令修改了多少次数据库,dirty计数器的值就增加多少。
例子
- 例如。如果我们为一个字符串键设置值:
127.0.0.1:6379> SET message "hello"
OK
那么程序会将dirty计数器的值增加1。
- 又例如,如果像一个集合键增加三个新元素:
127.0.0.1:6379> SADD database Redis MongoDB MariaDB
(integer) 3
那么程序会将dirty计数器的值增加3。
- 如图所示,该图展示了服务器状态中包含的dirty计数器和lastsave属性,
说明如下:
1.dirty计数器的值为123,表示服务器在上次保存之后对数据库状态共进行了123次修改
2.lastsave属性则记录了服务器上次执行保存的时间1378270800
检查保存条件是否满足
以下伪代码z展示了serverCron函数检查保存条件的过程:
def serverCron():