你必须知道的Redis持久化机制-RDB快照

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 记录命令,持久化的数据量不大。但是在AOF日志恢复时,需要把日志的每条命令都执行一遍。如果日志很多,恢复过程就会变得很漫长。因此,Redis提供了另一种持久化机制,那就是RDB快照。

前言

我们都知道,Redis有两大持久化机制:AOF日志和RDB快照。AOF方法每次执行只记录命令,持久化的数据量不大。但是在AOF日志恢复时,需要把日志的每条命令都执行一遍。如果日志很多,恢复过程就会变得很漫长。因此,Redis提供了另一种持久化机制,那就是RDB快照。

RDB快照写入规则

和AOF记录命令不同,RDB记录的当前的数据。Redis有提供2个命令来生成RDB快照文件,分别是save和bgsave。

  • save: 这种方式在主线程执行,容易导致阻塞;
  • bgsave: 创建一个子进程来执行RDB写入工作。这种方式可避免主线程的阻塞(默认配置)

这里你可能有疑问,快照过程中,如果有数据做了修改,RDB是怎么做的呢?这里就要介绍下写时复制了。

写时复制技术

写时复制是操作系统提供的功能,Redis在执行RDB快照时,依然能正常处理写操作。这样说可能不够明朗,详细点说说bgsave这个过程:

image.png

bgsave子进程是由主线程fork生成的,而且可以共享主线程的所有内存数据。主线程和子进程bgsave是互不干扰的。

当主线程要修改一块数据,这块数据就会复制一份到副本上,然后主线程在这个副本上修改。同时呢,bgsave子进程可继续将原来的数据写入RDB文件。这样就能某时刻快照的完整性,也不影响redis同时对当时数据的操作。

写到这,你是否认为RDB快照这样设计就完美了呢?答案是否定的。我们仔细想想,如果每次快照都是将全量数据备份,数据量大了之后,会有什么后果:

  • 全量数据写入RDB文件,磁盘压力增大。可能存在前一个快照没执行完,后一个又开始了。
  • bgsave子进程虽不阻塞主线程,但它是由主线程fork出来的。fork的过程是会阻塞主线程的。

基于这两大问题,Redis提供了增量快照的方式。

RDB增量快照

增量快照,就是指第一次全量快照后,后续RDB快照都是只记录修改过的数据记录,这样就可以避免很多开销。实现的方法就是 第一次全量快照后,数据修改后,会记录下来。这样在下一次增量快照时就知道哪些数据被修改了。

和AOF相比,RDB快照恢复速度快。但是快照的频率设置需要注意了。如果设置的频率很高,宕机可能就会丢失较多数据;频率太低的话,开销也会很大。

AOF和RDB混用

我们在考虑持久化时,肯定希望它恢复速度快,同时开销尽量小,而且尽量丢失少一点的数据。因此,在Redis4.0之后,支持了AOF和RDB混用的方式。

这种方式就是RDB以设定的频率执行,比如每30秒执行一次。然后没有执行快照的时间内,就用AOF日志去记录这段时间内的操作命令。这样一来,就解决了上述对持久化的期望。

小结

对于RDB快照和AOF文件,我们可根据实际需要去选择。提供一下选择参考:

数据可靠性要求高,少丢失: 选择RDB快照和 AOF 混用;

  • 允许分钟级别的数据丢失: 可以只使用 RDB;
  • 只用 AOF: 优先考虑 everysec 的配置(可靠性和性能之间的平衡)
相关实践学习
基于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
相关文章
|
13天前
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
36 5
|
27天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
37 5
|
1月前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
1月前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
2月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
43 2
|
7月前
|
NoSQL 关系型数据库 MySQL
Redis持久化机制 RDB 和 AOF 的选择
Redis持久化机制 RDB 和 AOF 的选择
104 0
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
43 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
3月前
|
存储 缓存 NoSQL
Redis中的rdb和aof
本文深入探讨了Redis的持久化机制,包括RDB和AOF两种方式。详细解释了RDB的工作原理、优势和劣势,以及AOF的实现原理、配置选项、文件重写机制和三种数据同步方式,还介绍了AOF文件修复工具redis-check-aof的使用,并通过实例展示了如何开启和配置AOF持久化方式。
Redis中的rdb和aof
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
70 1
|
3月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群