RDB文件的创建与载入
- 1.SAVE和BGSAVE可以创建RDB文件,前者阻塞,后置fork子进程去创建。
- 2.RDB文件的载入只有在服务器启动时候自动执行,redis自动检测RDB文件检测到就执行。
- 3.注意点:如果同时开启了AOF和RDB文件,则优先使用AOF
- 4.再载入RDB文件期间,redis一直阻塞。
自动间隔性保存
- 1.可以配置 使得每隔一段时间执行BGSAVE
- 2.服务器维护一个dirty计数器以及lastsave属性。
- 3.dirty是记录距离上一次执行save或者bgsave之后,服务器对所有数据库进行的写入,删除和更新等操作的次数
- 4.lastsave则是记录上一次save和bgsave执行完毕的时间戳。
RDB文件结构和分析RDB文件(文件都是二进制,我们这边只是字符串化)
- 1.REDIS:固定标志,类似于魔数
- 2.db_version:4个字节,标识这个文件的版本号
- 3.database:标识database的编号,之后的就是其数据,这个部分可以是任意个。
- 4.EOF:标识文件结尾
- 5.check_sum:校验文件是否完整
- 6.database部分:包含是SELECTDB,db_number,key-values
- 7.SELECTDB:提示redis接下来读取的将是一个数据库号
- 8.db_number:保存具体的数据库号
- 9.key-values:代表具体的keyvalue,value是五种对象之一。不带过期时间的键值对包含TYPE,KEY,VALUE,带有过期时间的则额外增加了EXPIRETIME_MS和ms
- 10.EXPIRETIME_MS:告知程序接下来读取的将是一个以毫秒为单位的过期时间
- 11.ms:是具体的过期时间戳。
RDB拾遗
- 1.既可以手动执行RDB,也可以定期执行。
- 2.RDB是将数据库数据保存为二进制文件,通过该文件数据库状态可以还原。
- 3.如果redis已经处于了BGSAVE,此时再遇到SAVE,BGSAVE,BGREWRITEAOF,会拒绝SAVE和BGSAVE(会出现同时执行save函数操作导致竞争),而BGREWRITEAOF则会等待BGSAVE执行完毕再执行。
- 4.如果BGREWRITEAOF先执行,此时遇到BGSAVE命令则会被拒绝。
网友评论