Redis持久化

4 篇文章 0 订阅
1 篇文章 0 订阅
什么是 Redis 持久化?

Redis 的数据全部在内存里,如果突然宕机,就会造成数据丢失,因此必须有一种机制来保证 Redis 的数据不会因故障而丢失,这种机制就是持久化机制。持久化机制主要有三种:RDB、AOF、混合持久化(redis 4.0引入)

RDB 持久化

RDB 全称为 Redis Database Backup file(Redis 数据备份文件),也叫 Redis 数据快照,简单来说就是把 redis 内存中的所有数据都记录到磁盘中,当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。

  • 快照文件称为RDB文件,默认保存在redis当前运行目录。
    在这里插入图片描述

  • 下图为Redis内部触发RDB的机制,可以在redis.conf文件中找到,默认情况下redis停机时也会执行一次快照。
    在这里插入图片描述

  • 为什么redis不利用主进程进行持久化的原因?
    首先我们都知道 redis 是单线程的,如果用redis主进程来执行持久化,会阻塞客户端请求所有的命令。因为单线程在处理线上业务请求的同时,还需进行内存快照,而内存快照涉及到内存到磁盘的IO操作,IO操作是会严重影响服务器性能,因此redis为了持久化过程中不阻塞线上业务(可以一边持久化,一边响应客户端请求)引入了多进程(fork子进程)快照。

  • 快照原理
    Redis在持久化时会调用fork函数产生子进程,快照持久化完全由子进程来处理,父子进程共享内存数据。存在一种场景:子进程在持久化过程中,父进程持续接受到客户端请求,对redis的内存数据进行修改,这个时候就会使用操作系统的COW(copy-on-write)机制进行数据段页面分离。数据段是由多个页面组成,当父进程需要对某个页面的数据进程修改时,就会把共享页面复制一份分离出来,然后对这个复制的页面进行修改,这时子进程对应的页面数据时没有发生变化的并且只能进行读操作(ready-only),这就实现了数据在读写时的隔离。
    在这里插入图片描述
AOF 持久化

AOF 全称为 Append Only File(追加文件),Redis 会把每一个写命令记录在 aof 文件,aof 文件可以看作是写命令的日志文件

  • AOF写命令的频率可以通过redis.conf文件来配置
    在这里插入图片描述
    *** AOF三种刷盘方式的优缺点**
    在这里插入图片描述
  • AOF重写
    AOF记录的是全量写命令,所以AOF文件体积远比RDB文件大,而且AOF会记录对同一个key的多次修改记录,但是其实这个key最后一次修改才是有意义的。通过bgrewriteaof命令让AOF文件执行重写功能,实现记录最少的命令达到相同的效果,效果如下图所示。
    在这里插入图片描述
AOF和RDB优缺点对比

在这里插入图片描述

混合持久化

混合持久化(redis 5以上版本默认):是RDB和AOF这两种方式的结合体。当开启混合持久化时,fork出子进程将当前全量的数据以rdb方式写入新的AOF文件,再将AOF持久化过程中(持久化开始到持久化结束)缓存区增量命令以aof方式也写入到新文件中,前半段为rdb格式的全量数据,后半段为aof的增量数据,将新文件替换旧的aof文件。混合持久化发生在AOF重写过程。

文章参考资料
书籍:Redis深度历险
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值