1、RDB长久化,什么叫 长久化?
1、1: 将数据库中的数据/状态保留到磁盘的过程。 1、2: 长处:避免数据失落,fork子过程解决不影响主过程(bgsave),适宜大规模的数据恢复 1、3: 毛病:最初一次长久化后的数据可能失落,Fork的时候,内存中的数据被克隆了一份,大抵2倍的膨胀性须要思考
2、长久化过程
2、1: 形式:save(rdbSave())、bgsave(fork() + rdbSave())2、2: rdb文件的载入是主动的(rdbLoad),没有手动命令2、3: 能够设置多个bgSave条件,满足其一即主动执行bgSave。碰撞时则进入排队?回绝?2、4: SAVE会阻塞redis服务器2、5: (存)数据库状态->rdb文件。(取)服务器启动-> 执行载入程序-> 优先载入aof文件 -> 没有aof文件载入rdb文件
3、dirty计数:记录写入、删除、更新等操作的次数。
3、1:lastsave记录上次执行SAVE/BGSAVE的UNIX工夫。3、2:dirty计数在SAVE/BGSAVE之后重置
4、serverCron:
4、1: 100ms执行一次。4、2: 查看savepramas,满足一条即执行BGSAVE(应用dirty计数器判断)4、3: 保留为2进制文件
5、database:
5、1: rdb文件 = redis字符 (标记是rdb文件) + db_version(版本号) + 非空数据库 + eof(是否载入标识) + check_sum (查看统计)5、2: 非空数据库 = select_db(常量,接下来要读入的数据库号码) + db_number (数据库号码) + key_value_pairs(键值对)5、3: 键值对 = type(值类型) + key (键对象) + value (值对象)5、4: 带有过期工夫的键值对 = type(值类型) + key (键对象) + value (值对象) + expiretime_ms (标识位) + ms (8字节长的UNIX工夫 戳)
6、value类型:
STRING、REDIS_RDB_TYPE_LIST、REDIS_RDB_TYPE_SET、REDIS_RDB_TYPE_HASH、REDIS_RDB_TYPE_ZSET、REDIS_RDB_TYPE_INSERT(整数汇合对象)、REDIS_RDB_TYPE_ZIPLIST(压缩列表对象)
7、RDB文件剖析:
7、1: 能够应用od命名剖析rdb文件,如:od -c dump.rdb7、2: 不蕴含任何键值对的rdb文件。(与5.1中的比照,非空数据库?)