RDB(快照)持久化:周期性保存某个时间点的全量数据快照
创建快照的方式:
- SAVE:阻塞Redis的服务器进程,直到RDB文件被创建完毕 通常不会使用这种,因为它用的是主线程,而主线程是处理所有请求的线程,使用SAVE就很耽误事
- 一般使用BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程 一般都使用这个
手动触发RDB持久化的方式
自动触发RDB持久化的方式
- 方法1:根据redis.conf配置里的SAVEmn定时触发(用的是BGSAVE)
- 方法2:主从复制时,主节点自动触发
- 方法3:执行Debug Reload
- 方法4:执行Shutdown且没有开启AOF持久化
BGSAVE原理
Redis会fork一个子进程,父子进程共享数据段,子进程以copy on write的方式去快照.
RDB缺点
- 每次快照持久化都会将内存数据完整的写到磁盘中,并不是只同步更新数据,如果数据量大时会由于IO而严重影响性能
- 可能会因为Redis挂掉而丢失从当前至最近一次快照期间的数据