Redis--RDB

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命令则会被拒绝。

你可能感兴趣的:(Redis--RDB)