聊一聊Redis的持久化~

作为内存数据库,Redis读写速度是无可挑剔的,但对内存来说,断电或遇到故障后数据就会丢失,基于此,Redis提供了两种持久化方案,如下:

RDB

Redis持久化本质是以不同的策略将内存中的数据写到磁盘,大体过程简述如下:

1RDB化含义

英文名称是Redis Data Base,也叫快照持久化。快照,在这是指某时刻的内存数据,而持久化则是将这⼀时刻的数据以⼆进制形式写⼊到磁盘⾥。

2⼿机制

1save

在客户端操作命令就可以将内存数据写⼊到磁盘里。

我们了解,Redis处理命令的方式是以单线程形式来进行的,客户端的请求都会放⼊⼀个队列⾥,当执⾏save命令时,如执⾏时间过长,后续请求就会被阻塞,其他命令都会被拒绝,生产环境切记别这么玩儿,否则就是自己送自己一首凉凉。

2bgsave

与save不同的是,它执行过程中不会阻塞客户端的请求,是将持久化⼯作交给⼦进程来执⾏,主进程仍负责客户端请求的处理⼯作。

3机制

⾃动触发通常是Redis中配置⽂件来执⾏的,如下:

save  m   n

m为秒数,n为次数,可理解为m秒内发⽣n次变化时,会触发bgsave。

再来看Redis配置⽂件redis.conf中的三个默认配置项:

save  900  1意思是时间900秒内,如果Redis中数据⾄少发⽣⼀次变化,就会执⾏bgsave。后边两个意思差不多一样。

当我们设置多个【save   m    n】命令时,满⾜任何⼀个条件都会触发持久化。

4RDB恢复

持久化的目的是为解决异常导致的数据丢失问题,接下来是使用RDB文件恢复数据。

流程就是当开启自动持久化后,数据会存到名为dump.rdb文件,当重启时,检测到dump.rdb文件后,会自动加载恢复数据。

AOF

1AOF化的含义

英文名称是AppendOnlyFile,也叫⽂件追加持久化。与RDB不同的是,它是通过保存所执行的写命令来实现的,并且保存数据格式是客户端发送的命令。

       

2AOF

AOF持久化方式,需启⽤配置⽂件中的appendonly参数,默认是关闭的。

开启AOF持久化后执行的每⼀条修改数据的命令,都会写入aof_buf缓冲区,后续写⼊AOF⽂件中的操作是由下面的配置来控制的:

三个配置项含义如下:

appendfsync    always:每次写入都进行刷盘,性能影响最⼤,占用磁盘IO较⾼,数据安全性最⾼。

appendfsync    everysec:1秒刷⼀次盘,性能影响相对较⼩。

appendfsync   no:按操作系统机制进行刷盘,性能影响最⼩,数据安全性低。

3AOF机制

随着命令的不断写⼊,AOF⽂件会变得越来越⼤,对此,Redis中提供了瘦身功能,也就是重写机制。

Redis配置文件中有两个对应的参数是来决定重写机制的触发时机的。

         auto-aof-rewrite-percentage:AOF⽂件距离上次⽂件增⻓超过多少百分⽐。

       auto-aof-rewrite-min-size:AOF⽂件体积最⼩多⼤以上触发。

满足设置的条件时,会自动触发AOF重写,此时Redis会扫描整个实例的数据,重新生成一个AOF文件来达到瘦身的效果。

4AOF

AOF和RBD不同,Redis会创建一个没有网络连接的伪客户端执行每条命令恢复数据。

创建伪客户端原因就是AOF中的数据格式,都是由命令组成的。

注意,如开启AOF持久化,会优先使用AOF,只有AOF关闭时,才RDB文件。

三、两种持久化优/

1RDB缺点

1

⽂件体积⼩:RDB的⽂件内容是⼆进制格式,因此体积比实例内存⼩。

恢复速度快:当Redis重启时,加载RDB⽂件速度快,短时间内迅速恢复数据。

2

数据缺失:RDB保存的是某⼀时刻数据,当Redis某⼀时刻异常时,会致数据丢失。

消耗资源:RDB⽂件的⽣成会消耗⼤量的CPU和内存资源,有⼀定代价。

2AOF点与缺点

1

数据更完整:AOF是即时写入的方式,数据保存更完整。恢复时降低数据损失率。

易读性强:AOF中保存的数据格式是客户端的写⼊命令,可读性性强。

2

⽂件体积⼤:AOF中存储客户端所有写命令,随着命令写⼊,⽂件越来越⼤。

增加磁盘IO:AOF刷盘如用每秒刷一次的方式会致磁盘IO升⾼,影响性能。

四、混合持久化

其实就是RDB与AOF的混合模式,是Redis4之后新增的。

1持久化

混合持久化是通过aof-use-rdb-preamble参数开启的。

操作方式为:在写⼊的时,先把数据以RDB的形式写⼊⽂件的开头,再将写命令以AOF格式追加到⽂件中,保证数据恢复速度,减少数据丢失⻛险。

2、文件恢复

混合持久化进⾏数据恢复流程为:Redis重启时,先加载RDB的内容,再重放增量AOF格式命令,避免AOF持久化时的全量加载,使加载速率⼤幅提升。

五、总结

RDB持久化

(1)把某时刻数据以二进制形式写⼊到磁盘里,服务重启时检测到对应文件自动加载进行数据恢复。

(2)手动触发和⾃动触发两种机制。

AOF持久化

(1)以⽂件追加的⽅式写⼊客户端执⾏的写命令。

(2)数据恢复时,通过创建伪客户端的⽅式执⾏命令,直到恢复完成。

混合持久化

(1)写入时以RDB形式写⼊⽂件开头,后续写命令以AOF格式追加到⽂件中。

以上为本人个人认知,如有侵权,请联系删除。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值