持久化方式之RDB
持久化方式之RDB
RDB(快照)持久化:保存某个时间节点的全量数据快照
Redis配置文件
在根目录下的redis.conf
配置文件中RDB相关信息
含义:900秒内有一条写入就产生快照,300秒内有10条写入就产生快照,以此类推
配置二:
设置成yes表示当备份进程出错的时候主进程就停止接受新的写入操作
配置三:
设置成yes就表示在备份时先压缩再保存,建议设置成no
RDB的创建与载入
生成命令一:SAVE
- 阻塞Redis的服务进程,直到RDB文件被创建完毕(很少被使用)
生成命令二: BGSAVE
- Fork一个子进程来创建RDB文件,不阻塞服务器进程
LASTSAVE
返回上次保存的时间
自动化触发RDB持久化的方式
- 根据redis.conf文件中的配置来定时触发(用的BGSAVE)
- 主从复置时,主节点自动触发
- 执行Debug Reload时
- 执行Shutdown且没有开启AOF持久化
BGSAVE原理
执行 bgsave 命令,Redis 父进程判断当前是否存在正在执行的子进程,如 RDB/AOF 子进程,如果存在 bgsave 命令直接返回。
父进程执行 fork 操作创建子进程,fork 操作过程中父进程会阻塞。
父进程 fork 完成后,bgsave 命令返回并不再阻塞父进程,可以继续响应其他命令。
子进程创建 RDB 文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。
进程发送信号给父进程表示完成,父进程更新统计信息。
缺点
内存数据全量同步,数据量大时会由于I/O而严重影响性能
可能会因为redis挂掉而丢失从当前至最后一次快照的数据
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Alfred的小站!