05 | 内存快照:宕机后,Redis如何实现快速恢复

文章介绍了Redis的内存快照(RDB)机制,包括全量快照、bgsave命令、写时复制技术(Copy-On-Write)确保快照过程的数据完整性。同时讨论了快照频率的权衡,以及RDB的优缺点。建议在数据高可靠性需求下,结合AOF日志使用,或者根据数据丢失容忍度选择合适策略。
摘要由CSDN通过智能技术生成

一、内存快照

1、指内存中的数据在某一个时刻的状态记录,可实现快速恢复

2、RDB 就是 Redis DataBase 的缩写,即数据可靠性

二、给哪些内存数据做快照?

1、为了提供所有数据的可靠性保证,它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中

2、Redis 提供了两个命令来生成 RDB 文件,分别是 save 和 bgsave

A、save:在主线程中执行,会导致阻塞;

B、bgsave:创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是 Redis RDB 文件生成的默认配置

3、通过 bgsave 命令来执行全量快照,这既提供了数据的可靠性保证,也避免了对 Redis 的性能影响

三、快照时数据能修改吗

1、在进行bgsave时,主线程没有阻塞,可以正常接收请求,但是,为了保证快照完整性,主线程只能处理读操作,不能修改正在执行快照的数据。

2、Redis 借助操作系统提供的写时复制技术(Copy-On-Write, COW),在执行快照的同时,正常处理写操作

A、如果主线程对这些数据也都是读操作(例如图中的键值对 A),那么,主线程和 bgsave 子进程相互不影响。

B、但是,如果主线程要修改一块数据(例如图中的键值对 C),那么,这块数据就会被复制一份,生成该数据的副本(键值对 C’)。然后,主线程在这个数据副本上进行修改。同时,bgsave 子进程可以继续把原来的数据(键值对 C)写入 RDB 文件

四、可以每秒做一次快照吗?

1、增量快照

A、做了一次全量快照后,后续的快照只对修改的数据进行快照记录,这样可以避免每次全量快照的开销

五、RDB的缺点

1、虽然跟 AOF 相比,快照的恢复速度快,但是,快照的频率不好把握,如果频率太低,两次快照间一旦宕机,就可能有比较多的数据丢失。如果频率太高,又会产生额外开销 

六、混合使用 AOF 日志和内存快照

1、内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作

七、建议

1、数据不能丢失时,内存快照和 AOF 的混合使用是一个很好的选择;

2、如果允许分钟级别的数据丢失,可以只使用 RDB

3、如果只用 AOF,优先使用 everysec 的配置选项,因为它在可靠性和性能之间取了一个平衡。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一点知趣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值