Redis RDB持久化
Posted 断水流大师兄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis RDB持久化相关的知识,希望对你有一定的参考价值。
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.rdb
7、2: 不包含任何键值对的rdb文件。(与5.1中的对比,非空数据库?)
以上是关于Redis RDB持久化的主要内容,如果未能解决你的问题,请参考以下文章