小伙用 12 张图讲明白了 Redis 持久化!(下)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 小伙用 12 张图讲明白了 Redis 持久化!

03 RDB 持久化


RDB 持久化是指在客户端输入 save、bgsave 或者达到配置文件自动保存快照条件时,将 Redis 在内存中的数据生成快照保存在名字为 dump.rdb(文件名可修改)的二进制文件中。


3.1 save 命令


save 命令会阻塞 Redis 服务器进程,直到 RDB 文件创建完毕为止,在 Redis 服务器阻塞期间,服务器不能处理任何命令请求。在客户端输入 save


127.0.0.1:6379> save
OK


快照生成完毕,会弹出 DB saved ondisk 的提示。


1349:M 25 Apr 13:16:48.935 * DB saved on disk


3.2 bgsave 命令


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


127.0.0.1:6379> bgsave
Background saving started


PS:bgsave 命令执行期间 SAVE 命令会被拒绝;不能同时执行两个 BGSAVE 命令;不能同时执行 BGREWRITEAOF 和 BGSAVE 命令。


3.3 bgsave 时写数据


bgsave 执行时,Redis 主线程能正常读写数据。读操作时,主线程和 bgsave 子线程互不影响;写操作时,Redis 会利用写时复制技术(Copy-On-Write, COW),生成被修改数据的副本。然后 bgsave 子线程把副本数据写入 RDB。


比如,bgsave 期间,主线程修改键值对 C,过程如下:


640.png


但是在这过程中发生宕机了咋办?比如,T0 时刻做了一次快照,T0+t 时刻又做了一次。但是 t 时间内主线程修改完数据 5 和 9,然后 Redis 宕机了,RDB 没记录到修改后的数据


Redis 重启恢复数据,就会出现数据 5 和 9 丢失的情况,没办法恢复。


640.png


这该咋办?我们需要记住那些数据被修改了


3.4 混合持久化


如下图所示,记录 t 时刻被修改的数据就需要占用额外的空间,而 Redis 是内存数据库,空间非常宝贵。所以,直接记录到内存这种方式不可取


640.png


内存开销比较小的方法是把 t 时间的增量写操作记录到 AOF 日志中,这样既保留了 RDB 的快速恢复,也没占用额外的空间。


如图,T1 和 T2 时刻的修改,用 AOF 日志记录,等第二次做全量快照时,清空 AOF 日志,因为此时的修改都记录到快照中了,恢复不用 AOF 日志了。


640.png


庆幸的是 Redis 4.0 就开始提供了这种 RDB + AOF 的持久化方式,开启的配置项是 aof-use-rdb-preamble yes,它需要配合 AOF 的重写机制实现。


# 开启混合持久化
redis> config set aof-use-rdb-preamble yes
OK
# AOF 重写
redis> BGREWRITEAOF
Background append only file rewriting started


在没有第二次做全量快照之前,它的格式是这样的:前半部分是 RDB 格式,后半部分是 AOF 增量日志。如果这个时候宕机,直接拿 appendonly.aof 恢复数据。


640.png

3.5 RDB 优缺点


优点


  1. 二进制数据,恢复时比 AOF 快
  2. RDB 的 bgsave 方式主线程不阻塞


缺点


  1. Redis 意外宕机 时,会丢失部分数据(混合持久化可解决)


  1. 当数据量比较大时,fork 的过程是非常耗时的,fork 子进程时是会阻塞的,在这期间 Redis 是不能响应客户端的请求的。


04 如何选择?


  1. 数据不能丢失时,选择内存快照和 AOF 混合使用;
  2. 如果允许分钟级别的数据丢失,可以只使用 RDB;
  3. 如果只用 AOF,优先使用 everysec 的配置选项,因为它在可靠性和性能之间取了一个平衡。


05 数据恢复流程



640.png


07 总结


本文主要讲解 Redis AOF 、RDB 持久化的原理和两者的优缺点,对比两者后,我还给你总结了 Redis 混合持久化的流程。最后给了你一些选择持久化方案的建议,希望看完你能有所收获。


全文将近字,张图,希望能帮到你。好啦,以上就是狗哥关于 Redis 持久化的总结。感谢各技术社区大佬们的付出,尤其是极客时间,真的牛逼。如果说我看得更远,那是因为我站在你们的肩膀上。希望这篇文章对你有帮助,我们下篇文章见~


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2天前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
2天前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
1月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
35 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
25 2
|
1月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
56 1
|
2月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
2月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
42 1
|
2月前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
37 0
|
2月前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
86 0
|
3月前
|
NoSQL Redis
Redis 临时manifest修改问题之确保被持久化到磁盘如何解决
Redis 临时manifest修改问题之确保被持久化到磁盘如何解决
下一篇
无影云桌面