简单认识redis - 9 redis持久机制

server/2024/10/19 12:21:35/
	Redis 提供了两种主要的持久化机制:RDB(Redis Database)和 AOF(Append Only File)。

RDB 持久化机制

工作原理
RDB 持久化是通过对 Redis 中的数据进行周期性的快照(snapshot)来实现的。在指定的时间间隔内,Redis 会将内存中的数据集快照写入磁盘上的一个 RDB 文件中。
例如,当满足以下条件之一时会触发 RDB 操作:
根据配置文件中的设置,达到指定的时间间隔(如每 900 秒如果至少有 1 个键发生了变化)。
在执行特定的命令时,如SAVE(该命令会阻塞 Redis 进程,直到 RD在这里插入代码片B 文件创建完成)或者BGSAVE(后台异步保存 RDB 文件,不会阻塞 Redis 进程的正常处理)。
文件结构
RDB 文件是一个经过压缩的二进制文件。它包含了 Redis 在某个时刻的数据集,包括键值对、过期时间等信息。
这种二进制结构使得 RDB 文件具有很高的加载效率,非常适合用于备份和灾难恢复。例如,在恢复数据时,可以直接将 RDB 文件加载到 Redis 内存中,快速恢复到之前的状态。
1.优点
紧凑高效:RDB 文件是二进制压缩文件,占用磁盘空间小,并且恢复数据速度快。因为它是内存数据的快照,直接加载即可,不需要像 AOF 那样重放大量的操作命令。
适合备份:由于 RDB 文件可以方便地在不同的 Redis 实例之间进行迁移,所以非常适合用于数据备份和灾难恢复场景。
2.缺点
数据丢失风险:如果 Redis 发生故障,并且距离上次 RDB 快照已经有一段时间了,那么在这期间修改的数据将会丢失。因为 RDB 是按照一定的时间间隔进行快照的,不能实时地保存数据的每一次修改。
可能影响性能:在执行BGSAVE操作时,虽然不会阻塞 Redis 的主进程,但会使用额外的内存和 CPU 资源来进行数据的快照操作,在一定程度上可能影响 Redis 的性能。

AOF 持久化机制

工作原理
AOF 持久化以日志的形式记录 Redis 服务器所执行的每一个写操作(如SET、LPUSH等命令)。这些写操作会按照顺序追加到一个 AOF 文件中。
例如,当执行SET key value命令时,这个命令会以文本协议的形式被追加到 AOF 文件的末尾。

文件结构
AOF 文件是一个纯文本文件,其中包含了一系列 Redis 命令。每一条命令都是按照 Redis 协议的格式记录的,这使得 AOF 文件具有可读性,方便进行人工查看和分析。

1.优点

  1. 数据安全性高:由于 AOF 记录了每一个写操作,所以只要 AOF 文件不丢失并且能够正确地重放(replay)这些操作,就可以最大程度地保证数据不丢失。即使 Redis 发生故障,也可以通过重新执行 AOF文件中的命令来恢复数据。
  2. 实时性较好:AOF 是实时地将写操作追加到文件中,相比 RDB 的周期性快照,AOF 能够更及时地保存数据的变化。

2.缺点

  1. 文件体积较大:因为 AOF 记录了所有的写操作,随着时间的推移和 Redis 操作的频繁进行,AOF 文件会变得越来越大。这不仅会占用大量的磁盘空间,而且在恢复数据时,由于需要重放大量的命令,恢复速度相对较慢。
  2. 性能影响:虽然 Redis 会对 AOF 文件进行后台重写(rewrite)来优化文件大小,但在重写过程中仍然会消耗一定的 CPU和内存资源,并且在重写期间对写操作的处理可能会受到一定影响。
  3. 混合持久化(Redis 4.0 及以后版本) 混合持久化结合了 RDB 和AOF 的优点。 在混合持久化模式下,Redis 会先按照 RDB 的方式对数据进行快照,然后将在两次快照之间发生的写操作以 AOF的方式追加到文件中。 这样在数据恢复时,首先加载 RDB 文件,然后再重放 AOF 部分的操作,既能够快速恢复数据,又能保证数据的完整性。

如何配置 Redis 的 RDB 持久化机制?

以下是配置 Redis 的 RDB 持久化机制的方法:
配置文件方式(redis.conf)

1.找到相关配置项
2.在 Redis 的配置文件(通常为 redis.conf)中,可以找到与 RDB 持久化相关的配置部分。

配置保存策略

Redis 允许通过设置save指令来确定何时进行 RDB 快照。例如:

save 900 1:表示如果在 900 秒(15 分钟)内至少有 1 个键被修改,就进行一次 RDB 持久化操作。
save 300 10:表示 300 秒(5 分钟)内至少有 10 个键被修改时触发 RDB 操作。
save 60 10000:表示 60 秒内至少有 10000 个键被修改时触发。
可以根据实际需求调整这些参数。如果不想使用 RDB 的自动保存功能,可以将这些save指令注释掉。

指定RDB 文件名称和存储路径 通过dbfilename配置项来指定 RDB文件的名称,默认名称为dump.rdb。 例如:

dir /var/lib/redis将 RDB文件存储到/var/lib/redis目录下。

使用dir配置项指定 RDB文件的存储目录,默认是 Redis 启动时的当前目录。例如:

可以设置为dbfilename mydump.rdb。

命令行方式
手动触发保存(SAVE 命令)

在 Redis 客户端中,可以使用SAVE命令来手动触发 RDB 持久化操作。但要注意,SAVE命令会阻塞 Redis 进程,直到 RDB
文件创建完成。这意味着在执行SAVE命令期间,Redis 不能处理其他客户端的请求。
例如: 在 Redis 客户端中输入SAVE,Redis将把当前内存中的数据集保存到 RDB 文件中。

后台异步保存(BGSAVE 命令)

与SAVE命令不同,BGSAVE命令会在后台异步地执行 RDB 持久化操作。Redis会创建一个子进程来执行保存操作,而主进程可以继续处理客户端的请求。
例如: 在 Redis 客户端中输入BGSAVE,Redis将在后台进行数据保存。可以通过INFO命令查看 BGSAVE的执行状态,在INFO命令的输出中,rdb_bgsave_in_progress字段如果为 1,表示 BGSAVE 操作正在进行。

在代码中配置(以 Java 为例,使用 Jedis 库) 如果在 Java 程序中使用 Jedis 与 Redis 交互,虽然不能直接在 Jedis 中配置 RDB 持久化的核心参数(如save策略等,这些是 Redis 服务器端的配置),但可以通过 Jedis 触发SAVE或BGSAVE操作。

java">    import redis.clients.jedis.Jedis;public class RedisRDBConfigExample {public static void main(String[] avg) {// 连接Redis服务器Jedis jedis = new Jedis("localhost", 6379);// 手动触发BGSAVE操作jedis.bgsave();// 关闭连接jedis.close();}}

在上述代码中,通过jedis.bgsave()触发了 Redis 的后台异步保存操作。如果要执行SAVE操作,可以使用jedis.save(),但要注意SAVE会阻塞操作。


http://www.ppmy.cn/server/133039.html

相关文章

浙大数据结构:10-排序4 统计工龄

较为简单题 1、主函数 用数组存每个数字出现了几次&#xff0c;再遍历一遍输出即可 #include <iostream> using namespace std; #define endl \nint main() {std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n;cin>>n;int a[55]{0};for(int i0;i&…

OGG同步ORACLE数据库到MYSQL

### OGG同步ORACLE数据库到MySQL Oracle GoldenGate (OGG) 是一个强大的数据复制和集成工具&#xff0c;可以实现实时的数据同步。以下是一个详细的步骤指南&#xff0c;介绍如何使用Oracle GoldenGate将数据从Oracle数据库同步到MySQL数据库。 #### 1. 环境准备 - **硬件与网…

用Java爬虫API,轻松获取电商商品SKU信息

在电子商务的精细化运营时代&#xff0c;SKU信息的重要性不言而喻。SKU&#xff08;Stock Keeping Unit&#xff09;信息不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。如何高效、准确地获取这些信息&#xff0…

鸿蒙网络编程系列31-使用RCP调用OpenAI接口实现智能助手

简介 在OpenAI推出GPT系列大模型以后&#xff0c;市场上各种类似的大模型也层出不穷&#xff0c;这些大模型也基本都会兼容OpenAI的接口&#xff0c;在开发基于大模型的应用时&#xff0c;选择使用OpenAI接口作为和后端大模型通讯的标准&#xff0c;可以更好的适配不同厂家的模…

C++《string的模拟实现》

在之前的篇章C《string》中我们已经了解了string中关于构造、容量、访问、修改操作等函数的功能&#xff0c;以及初步学习了这些函数的使用该如何使用。通过学习string内的各个函数后我们可以发现在解决一些要使用到字符串的环境下有了string内的这些函数操作能大大简化&#x…

Python 将网页保存为图片(Chrome内核)

一、背景介绍 之前写过一篇将网页保存为图片的文章 C# 将网页保存为图片&#xff08;利用WebBrowser&#xff09;_c# webbrowser 把网页内容转换成图片-CSDN博客​​​​​​ 这里有个弊端&#xff0c;C# WebBrowser使用的是IE内核&#xff0c;目前很多网站都不支持IE了&…

jetson agx orin 的pytorch、torchvision安装

首先使用conda创建一个虚拟环境&#xff0c;python3.8&#xff0c;只能使用3.8&#xff0c;因为后面使用NVIDIA提供的torch包对py环境有要求。 使用 conda search cudatoolkit查看自己支持的cuda版本&#xff0c;我选的11.4 然后进入英伟达的torch网站 pytorch英伟达下载地址 …

时间序列预测模型之一文讲透 MA 模型

ARIMA 模型&#xff08;自回归积分滑动平均模型&#xff09;是时间序列分析中的一种广泛应用的模型&#xff0c;这个模型在各个领域发挥着巨大的作用&#xff0c;如股票市场的价格预测、经济中 GDP 增长率预测、供应链中销售量和库存需求预测、气象中气温和降水量的预测等等。为…