Redis持久化(RDB、AOF、混合持久化)

2024-08-21 16:12
文章标签 redis 持久 rdb 混合 aof

本文主要是介绍Redis持久化(RDB、AOF、混合持久化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、持久化机制

(1)RDB

(2)AOF

2、混合持久化

3、总结


为什么需要持久化?

Redis 是一个基于内存的键值存储系统,它提供了非常快的数据访问速度,因为它不需要像传统的磁盘存储那样进行物理 I/O 操作

然而,这也意味着 Redis 中的数据是易失性的,即一旦 Redis 服务停止或者机器重启,所有的数据都会丢失

如果没有持久化机制,那么Redis中的数据将会丢失无法恢复。有了持久化机制,Redis在下次重启时可以利用之前持久化的文件进行数据恢复

1、持久化机制

Redis支持的两种持久化机制:

54bedb6184264a47b5bbf437d080406b.png

RDB:RDB文件是一个经过压缩的二进制文件

AOF:AOF则是以追加写的方式记录Redis执行的每一条写命令。

RDB 是 Redis 默认的持久化方式(AOF默认是关闭的)

RDB 和 AOF 是可以同时开启的,在这种情况下,当Redis重启的时候会优先载入 AOF 文件来恢复原始的数据

(1)RDB

RDB(Redis DataBase):把当前全部数据生成快照保存在硬盘上

RDB在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存里

优点:生成的RDB文件较小,恢复数据的速度快且简单,适用于大规模数据备份和恢复

缺点数据可能会丢失,因为 Redis 只会在指定的时间点生成快照文件。如果Redis进程在持久化过程中发生意外中断,可能会导致数据丢失

RDB持久化可以手动触发,也可以自动触发,savebgsave命令都可以手动触发RDB持久化

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

  • bgsave:bgsave 命令会 fork 一个子进程(注意是子进程,不是子线程)在后台生成快照文件,不会阻塞 Redis 服务器,服务器进程(父进程)可以继续处理命令请求。

当客户端发服务发出bgsave命令时,Redis服务器主进程会forks一个子进程来数据同步问题,在将数据保存到rdb文件之后,子进程会退出

简而言之RDB持久化的步骤:

  1. Redis会定期fork一个子进程
  2. 子进程会首先将数据集写入一个临时文件
  3. 当临时文件写入完成后,Redis会用这个临时文件替换上次持久化的

配置示例:

RDB可以通过配置自动触发快照的频率,例如在N秒内执行了M次写操作时

在Redis配置文件(redis.conf)中配置RDB的保存方式和频率,如下所示:

save 900 1         # 在900秒内,如果至少有1个键被修改,则执行一次RDB快照
2save 300 10        # 在300秒内,如果至少有10个键被修改,则执行一次RDB快照
3save 60 10000      # 在60秒内,如果至少有10000个键被修改,则执行一次RDB快照

(2)AOF

AOF(Append Only File):记录每次对数据的操作到硬盘上

AOF持久化是把每次写命令追加写入日志中,当需要恢复数据时重新执行AOF文件中的命令就可以了。AOF解决了数据持久化的实时性,也是目前主流的Redis持久化方式,采用先写内存,后写日志

优点:数据更加持久,可以保证每一条写入命令都被持久化

缺点:生成的AOF文件较大,恢复数据的速度相对较慢

配置示例:

appendonly yes                # 启用AOF持久化
appendfsync everysec          # 每秒钟将写操作同步到AOF文件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

从持久化中恢复数据

如果选择持久化方案,可以这样选择:

  1. 业务对于数据丢失不敏感,选 RDB

  2. 业务对数据完整性要求比较高,选 AOF

如果一台服务器上有既有RDB文件,又有AOF文件,该加载谁呢?==>优先AOF

数据的备份、持久化做完了,我们如何从这些持久化文件中恢复数据呢?

其实想要从这些文件中恢复数据,只需要重新启动Redis即可

📌选择合适的持久化方式

🔴RDB 通常用于需要快速恢复数据的情况,因为它只需要加载一个文件即可恢复数据。

🔴AOF 更适合需要更高数据完整性的场景,因为它可以记录每一次写操作,从而提供接近实时的数据恢复能力。

2、混合持久化

RDB、AOF持久化都有所弊端:

  • RDB 持久化能够快速地储存和恢复数据,但是在服务器停机时可能会丢失大量数据。

  • AOF 持久化能够有效地提高数据的安全性,但是在储存和恢复数据方面却要耗费大量的时间

为了让用户能够同时拥有上述两种持久化的优点

Redis 4.0 中提出了 RDB-AOF 混合持久化,混合使用 AOF日志和内存快照的方法

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

类似下面这样:

这样一来,快照不用很频繁地执行,这就避免了频繁 fork 对主线程的影响。而且,AOF 日志也只用记录两次快照间的操作

也就是说,不需要记录所有操作了,就不会出现文件过大的情况了,也可以避免重写开销

配置方式:

appendonly yes。           # 启用AOF持久化
aof-use-rdb-preamble yes   

3、总结

Redis 需要持久化主要是为了保证数据的安全性和持久性,防止数据丢失

Redis 持久化功能默认是开启的,这样做的目的也是为了保证程序的稳定性,防止缓存雪崩、缓存击穿等以及保证数据不丢失。

若要手动关闭 Redis 持久化,需要将 RDB、AOF 和混合持久化全部关闭才行,并且关闭之后需要重启 Redis 服务才能生效

这篇关于Redis持久化(RDB、AOF、混合持久化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093649

相关文章

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir