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持久化的主要内容,如果未能解决你的问题,请参考以下文章

redis 之redis持久化rdb与aof

redis持久化RDB与AOF

redis持久化RDB与AOF

redis持久化RDB与AOF

redis持久化之rdb

Redis 持久化之RDB和AOF