Redis之RDB(Redis DataBase)

简介: 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

原理: Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

Fork原理:fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。

rdb 保存的文件格式:rdb。默认文件名为:dump.rdb

关于rdb在redis.conf文件中的相关配置,在节点SNAPSHOTTING处,与rdb相关的配置有6项:

  • Save 数据保存操作.
    • 设置格式: save 秒钟 写操作次数
    • RDB是整个内存的压缩过的Snapshot,RDB的数据结构,可以配置复合的快照触发条件,
      默认:
      是1分钟内改了1万次,
      或5分钟内改了10次,
      或15分钟内改了1次。
    • 如果想禁用RDB持久化的策略,只要不设置任何save指令,或者给save传入一个空字符串参数也可以。例如: save “”
    • 如果想立即保存数据则可以使用save命令,该命令是同步的。也就是当使用该命令后,redis就只进行save操作,此时其他命令都会被忽略掉。如果想采用异步,也就是redis保存备份数据到磁盘时用户仍旧可以操作数据(增删改查等)则可以使用bgsave名;,但此时就不能保存数据完整性了。
    • 更具体信息查看redis.conf注释。
  • stop-write-on-bgsave-error
    • 如果配置成no,表示你不在乎数据不一致或者有其他的手段发现和控制
  • rdbcompression
    • 对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能(默认yes,即开启)。
  • rdbchecksum
    • 在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能(默认yes,表示启用数据校验)。
  • dbfilename
    • 表示rdb文件文件名,默认名为dump.rdb
  • dir
    • 表示存储rdb文件的位置,默认存储在启动redis命令的目录下。

可以通过redis-check-dump目录修改损坏的dump.rdb文件。

猜你喜欢

转载自blog.csdn.net/u014268482/article/details/80983354