Redis的持久化机制

1. RDB

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

Redis其实默认是会持久化的,即在你主动关闭Redis服务的时候,Redis会将数据保存为.rdb文件,但是如果Redis不是正常关机而是突然宕机,那么就不会触发RDB

那么如何手动来执行RDB呢?

save

save命令可以让Redis主进程来执行RDB,因为Redis是单线程的,此时主进程来执行RDB,其他的线程会被阻塞等待,这样的效果并不好。

bgsave

这个命令是单独启动一个子进程来实现RDB操作,不会影响主进程。

在这里插入图片描述
命令的结果是Background saving started 后台开启保存。这更适合Redis在运行中。

Redis内部有触发RDB的机制,在redis.conf中可以看到
在这里插入图片描述

在这里插入图片描述
第一行的含义是:3600s内,如果至少有一个key被修改,则执行bgsave,其余同理

但是如果save “” 开启后则表示禁用RDB,save “” 默认是被注释掉的

在这里插入图片描述
这个是代表RDB文件是否被压缩,默认是yes,但是不建议开启,因为会消耗cpu资源

在这里插入图片描述
这代表了RDB的文件名称

在这里插入图片描述
这表示了RDB文件的存储位置,默认是当前文件夹

RDB如何设置保存数据到RDB的频率呢?时间太短了例如save 1 1 这样会频繁的执行bgsave也会对性能产生开销,如果太长了例如 save 30 30 这样子如果Redis宕机了又会造成数据丢失。

总结:Redis默认是使用RDB的,但是是在关机后执行bgsave,我们也可以在自定义条件来触发RDB。

RDB的bgsave流程

当需要执行RDB时,子进程会fork主进程,主要的目的就是复制主进程的页表,因为在Redis操作内存时,不是直接操作物理内存,而是通过操作系统来进行操作物理内存,操作系统会分配一块虚拟内存来给Redis,虚拟内存和物理内存之间通过页面建立映射,这样子Redis就可以操作内存了,子进程fork主进程,主要的目的就是fork主进程的页表,拿着页表去进行RDB,那么在RDB时,主进程原来的内存空间不能进行写操作,主进程会复制一份数据到另一份内存空间,主进程的读写操作都在另一份内存空间中。
在这里插入图片描述

RDB的缺点:

  1. 会产生数据丢失
  2. RDB操作耗时

2. AOF

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

AOF文件的大小是逐渐增大的一个过程,Redis默认是不开启AOF的,需要在redis.conf文件中进行配置

在这里插入图片描述
appendonly默认为no,表示不开启AOF,需要将其改为yes来开启AOF
在这里插入图片描述
appendfilename表示AOF文件的名称

在这里插入图片描述
appendfsync有三个值

  1. always:表示每执行一次写命令,就将命令记录到AOF中
  2. everysec:写完命令先将命令放入到AOF缓冲区,然后每隔1s将缓冲区数据添加到AOF文件(默认方案)
  3. no:写完命令先将命令放入到AOF缓冲区,由操作系统来决定何时将缓冲区数据写入到AOF文件

appendfsync三种值的优缺点:

配置项刷盘时机优点缺点
always同步刷盘可靠性高性能开销大
everysec每秒刷盘性能适中最多丢失1s数据
no操作系统控制性能最好可靠性差,可能丢失大量数据

AOF的缺点:

  1. AOF因为记录了所有的命令,所以AOF文件的体积会很大
  2. 无效的指令:比如对一个key操作n次,前n-1次的命令都是无效的,又例如新增命令有100万条,后面直接执行一条删除命令,那么前面的所有指令都是无效的

AOF提供了bgrewriteaof命令会自动的优化AOF文件内的命令,尽可能用最少的命令来达到相同的效果

bgrewriteaof确实能够减少AOF文件的体积,但是什么时候去执行这个命令呢?

在这里插入图片描述
配置文件中有对bgrewriteaof触发的阈值

  1. 如果文件大小达到64mb会执行bgrewriteaof
  2. AOF文件相比上次执行bgrewriteaof时的文件大小增长超过了100%则会触发bgrewriteaof
RDBAOF
持久化方式定时对内存做快照记录每一次执行的命令
数据完整性不完整,两次备份间会丢失数据相对完整,依赖于刷盘策略
文件大小RDB有压缩机制,文件小记录命令,文件大
宕机恢复速度
数据恢复优先级
系统资源占用
使用场景可以容忍一段时间的数据丢失对数据安全性要求高
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值