Redis持久化之RDB

Redis持久化之RDB

RDB (快照)持久化:保存某个时间点的全量数据快照。

在配置文件中进行配置

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes  # 当备份进程出错的时候就停止主进程写入数据

rdbcompression yes    # RDB备份文件是否开启压缩,建议为no,redis本身就是CPU密集型进程

以save 900 1为例,意思是在900s内,出现1一条数据变动就进行一次RDB备份。


Redis的持久化方式

➢ SAVE :阻塞Redis的服务器进程,直到RDB文件被创建完毕
➢ BGSAVE : Fork出一-个子进程来创建RDB文件,不阻塞服务器进程

自动化触发RDB持久化的方式

  • 根据redis.conf配置里的SAVE m n定时触发(用的是BGSAVE )
  • 主从复制时BGSAVE,主节点自动触发
  • 执行Debug Reload
  • 执行SHUTDOWN的时候没有开启AOF持久化

BGSAVE原理

BGSAVE原理

系统调用fork() :创建进程,实现了Copy-on-Write

Copy-on-Write
如果有多个调用者同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变


使用RDB持久化的缺点

  • 内存数据的全量同步, 数据量大会由于I/O而严重影响性能
  • 可能会因为Redis挂掉而丢失从当前至最近一-次快照期间的数据

你可能感兴趣的:(Redis持久化之RDB)