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原理
系统调用fork() :创建进程,实现了Copy-on-Write
Copy-on-Write
如果有多个调用者同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变
使用RDB持久化的缺点
- 内存数据的全量同步, 数据量大会由于I/O而严重影响性能
- 可能会因为Redis挂掉而丢失从当前至最近一-次快照期间的数据