10 Redis的持久化

Redis支持RDB和AOF两种持久化机制

1、RDB(Redis DataBase)
  1. 是对命令的全量快照
  2. 随着key的数量增大,那么写入磁盘的开销也会越来越大
2、RDB文件的生成是否会阻塞主线程

save: 使用save的方式会阻塞主线程,影响redis的性能
bgsave: 一般情况下不会阻塞主线程,原因是会创建一个子进程,单独取创建一个RDB的dump文件,是默认配置
10 Redis的持久化_第1张图片
上图中的配置,后台使用的bgsave命令,save只是一个摆设。

3、bgsave为啥不阻塞主线程?

10 Redis的持久化_第2张图片
另外,shutdown也会开启save操作。
and, 从节点执行的全量复制操作,这个时候主节点自动执行bgsave,生成一个RDB文件发给从节点。从节点拿到文件开始全量复制。

4、快照的时候修改key的影响?
  1. 在进行bgsave的时候,是可以对key进行修改的。
  2. 在主线程fork一个子进程进行快照的时候,在bgsave命令执行后,如果对key进行修改,那么写时复制的值是旧值,那么从节点拿到的数据就是旧的数据,与主节点key不一致.
    RDB导致的数据丢失问题
    主线程在fork的时候,会导致阻塞.因此RDB的方式还是有很大的缺陷
5、AOF (append only file)
  1. 配置文件中开启aof
    10 Redis的持久化_第3张图片
    注意:读命令不会写入AOF。

  2. AOF的工作流程
    10 Redis的持久化_第4张图片

  3. Redis的重启加载流程
    10 Redis的持久化_第5张图片
    生产环境,是RDB + AOF共同使用的
    10 Redis的持久化_第6张图片

你可能感兴趣的:(redis,redis,数据库,缓存)