当前位置: 首页 > news >正文

Redis的持久化存储和集群管理操作

Redis 的持久化存储和集群

一、引言

Redis 是一个开源的内存数据结构存储系统,被广泛应用于缓存、消息队列、排行榜等场景。然而,由于数据存储在内存中,一旦服务器重启或出现故障,数据就会丢失。为了解决这个问题,Redis 提供了两种持久化存储方式:RDB(Redis Database)和 AOF(Append Only File)。同时,为了提高系统的可扩展性和可用性,Redis 还支持集群模式。

二、Redis 的持久化存储

(一)RDB 持久化

  1. 工作原理

    • RDB 持久化是通过创建一个内存快照来保存 Redis 数据库在某个时间点的状态。这个快照文件可以在 Redis 服务器重启时加载,从而恢复数据库的状态。

    • Redis 会在指定的时间间隔内或者当满足特定条件时(如执行了一定数量的写操作),自动触发 RDB 持久化。

  2. 优点

    • 生成的 RDB 文件紧凑,体积小,便于备份和恢复。

    • 恢复数据的速度非常快,因为只需要将 RDB 文件加载到内存中即可。

  3. 缺点

    • 由于是在特定时间点创建快照,所以可能会丢失在快照创建之间的数据。

    • 当数据量较大时,创建快照可能会导致 Redis 服务器暂时停止服务,影响性能。

  4. 配置方法

    • 在 Redis 配置文件中,可以通过以下参数来配置 RDB 持久化:

      • save <seconds> <changes>:指定在多少秒内有多少个键被修改时触发 RDB 持久化。例如,save 900 1表示在 900 秒内至少有 1 个键被修改时触发 RDB 持久化。

      • dbfilename <filename>:指定 RDB 文件的文件名。

      • dir <directory>:指定 RDB 文件的存储目录。

(二)AOF 持久化

  1. 工作原理

    • AOF 持久化是通过记录 Redis 服务器执行的所有写命令来保存数据库的状态。这些写命令以文本形式追加到 AOF 文件中。当 Redis 服务器重启时,可以通过重新执行 AOF 文件中的写命令来恢复数据库的状态。

    • Redis 可以在每次执行写命令时立即将命令追加到 AOF 文件中,也可以设置为每隔一段时间追加一次。

  2. 优点

    • 可以提供更好的数据持久性,因为它记录了所有的写操作,不会丢失数据。

    • AOF 文件易于理解和解析,可以用于数据恢复和故障排查。

  3. 缺点

    • AOF 文件通常比 RDB 文件大,因为它记录了所有的写操作。

    • 恢复数据的速度相对较慢,因为需要重新执行所有的写命令。

  4. 配置方法

    • 在 Redis 配置文件中,可以通过以下参数来配置 AOF 持久化:

      • appendonly yes:开启 AOF 持久化。

      • appendfsync always|everysec|no:指定 AOF 文件的同步方式。always表示每次执行写命令时立即同步到 AOF 文件;everysec表示每秒同步一次;no表示由操作系统决定何时同步。

      • no-appendfsync-on-rewrite no|yes:在进行 AOF 重写时是否禁止同步 AOF 文件。如果设置为yes,可以提高 AOF 重写的性能,但可能会导致数据丢失。

      • auto-aof-rewrite-percentage <percentage>:指定 AOF 文件相对于上次重写后的增长比例,当增长比例达到这个值时,Redis 会自动触发 AOF 重写。例如,auto-aof-rewrite-percentage 100表示当 AOF 文件大小是上次重写后的两倍时,触发 AOF 重写。

      • auto-aof-rewrite-min-size <size>:指定触发 AOF 重写的最小文件大小。例如,auto-aof-rewrite-min-size 64mb表示当 AOF 文件大小大于 64MB 时,触发 AOF 重写。

(三)选择合适的持久化方式

  1. 根据数据重要性选择

    • 如果数据非常重要,不能丢失,那么可以选择 AOF 持久化。因为 AOF 记录了所有的写操作,可以保证数据的完整性。

    • 如果数据相对不重要,或者可以接受一定程度的数据丢失,那么可以选择 RDB 持久化。RDB 文件体积小,恢复速度快,适用于对性能要求较高的场景。

  2. 根据性能需求选择

    • RDB 持久化在创建快照时可能会导致 Redis 服务器暂时停止服务,影响性能。如果对性能要求非常高,可以选择 AOF 持久化,因为它可以在后台进行重写操作,不会影响服务器的正常运行。

    • 但是,AOF 文件通常比 RDB 文件大,恢复数据的速度也相对较慢。如果对恢复速度要求非常高,可以选择 RDB 持久化。

  3. 结合使用

    • 也可以结合使用 RDB 和 AOF 持久化,以充分发挥两者的优势。例如,可以定期使用 RDB 持久化创建快照,同时使用 AOF 持久化记录所有的写操作。这样,在恢复数据时,可以先加载 RDB 文件,然后再重放 AOF 文件中的写命令,从而提高恢复速度和数据的完整性。

三、Redis 的集群

(一)集群的概念和优势

  1. 概念

    • Redis 集群是由多个 Redis 节点组成的分布式系统。这些节点可以分布在不同的服务器上,通过网络进行通信和协作。

    • Redis 集群中的每个节点都负责存储一部分数据,并可以处理客户端的请求。当客户端向集群发送请求时,Redis 会根据请求的键值对计算出应该由哪个节点来处理这个请求,并将请求转发到相应的节点。

  2. 优势

    • 可扩展性:可以通过添加更多的节点来扩展集群的存储容量和处理能力。

    • 高可用性:如果某个节点出现故障,其他节点可以继续处理请求,不会导致整个系统的瘫痪。

    • 负载均衡:请求可以均匀地分布到各个节点上,避免单个节点负载过高。

(二)集群的搭建

  1. 准备工作

    • 安装多个 Redis 服务器,并确保它们可以相互通信。

    • 为每个 Redis 服务器创建一个配置文件,指定不同的端口号和数据存储目录。

  2. 创建集群

    • 使用 Redis 提供的redis-cli工具来创建集群。可以使用以下命令来创建一个包含六个节点的集群:

redis-cli --cluster create <node1_ip>:<node1_port> <node2_ip>:<node2_port> <node3_ip>:<node3_port> <node4_ip>:<node4_port> <node5_ip>:<node5_port> <node6_ip>:<node6_port> --cluster-replicas 1
  • 这个命令会将六个节点组成一个集群,并为每个主节点分配一个从节点。

  1. 验证集群

    • 使用redis-cli连接到集群中的任意一个节点,并执行一些命令来验证集群是否正常工作。例如,可以使用setget命令来设置和获取键值对,然后检查结果是否正确。

(三)集群的操作和管理

  1. 添加和删除节点

    • 可以使用redis-cli工具来添加和删除集群中的节点。例如,可以使用以下命令来添加一个新的节点:

redis-cli --cluster add-node <new_node_ip>:<new_node_port> <existing_node_ip>:<existing_node_port>
  • 这个命令会将新的节点添加到集群中,并将其分配给一个主节点作为从节点。

  • 要删除一个节点,可以使用以下命令:

redis-cli --cluster del-node <node_ip>:<node_port> <node_id>
  • 这个命令会从集群中删除指定的节点,并将其负责的数据迁移到其他节点上。

  1. 数据迁移

    • 当添加或删除节点时,可能需要进行数据迁移。Redis 集群会自动将数据从一个节点迁移到另一个节点,以保持数据的均衡分布。

    • 可以使用redis-cli工具来监控数据迁移的进度。例如,可以使用以下命令来查看数据迁移的状态:

redis-cli --cluster info <node_ip>:<node_port>
  1. 故障转移

    • 如果主节点出现故障,Redis 集群会自动进行故障转移。从节点会被提升为主节点,并开始处理客户端的请求。

    • 可以使用redis-cli工具来监控故障转移的过程。例如,可以使用以下命令来查看集群的状态:

redis-cli --cluster check <node_ip>:<node_port>

四、示例

(一)RDB 持久化示例

以下是一个简单的 Redis 配置文件示例,展示了如何配置 RDB 持久化:

# 开启 RDB 持久化
save 900 1
save 300 10
save 60 10000
​
# 指定 RDB 文件的文件名和存储目录
dbfilename dump.rdb
dir /var/lib/redis

在这个配置文件中,Redis 会在 900 秒内至少有 1 个键被修改、300 秒内至少有 10 个键被修改或者 60 秒内至少有 10000 个键被修改时触发 RDB 持久化。RDB 文件的文件名是dump.rdb,存储在/var/lib/redis目录下。

(二)AOF 持久化示例

以下是一个简单的 Redis 配置文件示例,展示了如何配置 AOF 持久化:

# 开启 AOF 持久化
appendonly yes
​
# 指定 AOF 文件的同步方式为每秒同步一次
appendfsync everysec
​
# 禁止在 AOF 重写时同步 AOF 文件,以提高性能
no-appendfsync-on-rewrite yes
​
# 当 AOF 文件大小是上次重写后的两倍时,触发 AOF 重写
auto-aof-rewrite-percentage 100
​
# 当 AOF 文件大小大于 64MB 时,触发 AOF 重写
auto-aof-rewrite-min-size 64mb

在这个配置文件中,Redis 会开启 AOF 持久化,并将 AOF 文件的同步方式设置为每秒同步一次。在进行 AOF 重写时,会禁止同步 AOF 文件,以提高性能。当 AOF 文件大小是上次重写后的两倍或者大于 64MB 时,会触发 AOF 重写。

(三)Redis 集群示例

以下是一个简单的 Redis 集群创建和验证的示例:

  1. 安装多个 Redis 服务器,并为每个服务器创建一个配置文件。例如,以下是一个节点的配置文件示例:

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes

在这个配置文件中,指定了 Redis 服务器的端口号为 7000,开启了集群模式,并指定了集群配置文件和节点超时时间。同时,开启了 AOF 持久化。

  1. 使用redis-cli工具创建集群:

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

这个命令会将六个节点组成一个集群,并为每个主节点分配一个从节点。

  1. 验证集群:

使用redis-cli连接到集群中的任意一个节点,并执行一些命令来验证集群是否正常工作。例如,可以使用以下命令来设置和获取键值对:

redis-cli -c -p 7000
set key value
get key

如果能够正确设置和获取键值对,说明集群正常工作。

五、总结

Redis 的持久化存储和集群功能为用户提供了强大的数据管理和高可用性解决方案。通过选择合适的持久化方式,可以保证数据的安全性和完整性;通过搭建集群,可以提高系统的可扩展性和可用性。在实际应用中,需要根据具体的需求和场景来选择合适的方案,并进行合理的配置和管理。

相关文章:

Redis的持久化存储和集群管理操作

Redis 的持久化存储和集群 一、引言 Redis 是一个开源的内存数据结构存储系统&#xff0c;被广泛应用于缓存、消息队列、排行榜等场景。然而&#xff0c;由于数据存储在内存中&#xff0c;一旦服务器重启或出现故障&#xff0c;数据就会丢失。为了解决这个问题&#xff0c;Re…...

Auto-encoder(自编码器)

Auto-encoder&#xff08;自编码器&#xff09; 1 基本概念 自编码就和之前的cycle GAN的概念很像&#xff0c;假設你有非常大量的圖片&#xff0c;在 Auto-Encoder 裡面你有兩個 Network&#xff0c;一個叫做 Encoder&#xff0c;一個叫做 Decoder&#xff0c;他們就是兩個 N…...

Vue+sortable+el-table表格排序使用指南

前言 这两天遇到一个需求&#xff1a;在点击【设置优先级】的按钮后弹出关于玩法类型的table&#xff0c;点击【排序】按钮可以后可以进行排序。由于组内使用的组件库是 element-ui&#xff0c;那我首先就想到了使用 el-table组件&#xff0c;但奈何其版本原因不能相应的拖拽排…...

表数据删一半,为什么表文件大小不变?

参数innodb_file_per_table 这个参数设置为ON&#xff0c;表示每个表数据单独存在一个文件中&#xff0c;这时如果执行drop命令&#xff0c;系统会直接删除表文件。 这个参数设置为off时&#xff0c;所有表的数据和索引都存在共享的.ibdata文件&#xff0c;即使表删掉了&…...

MoCoOp: Mixture of Prompt Learning for Vision Language Models

文章汇总 当前的问题 1)数据集风格变化。 如图1所示&#xff0c;对于一个数据集&#xff0c;单个软提示可能不足以捕获数据中呈现的各种样式。同一数据集中的不同实例可能与不同的提示符兼容。因此&#xff0c;更**自然的做法是使用多个提示来充分表示这些变化**。 2)过拟合…...

YOLOv8 onnx 部署

本文是在win10系统下进行yolov8目标检测推理的过程记录。 yolov8 已经集成到OpenCV&#xff0c;可以通过两种方式调用&#xff0c;一种是直接通过OpenCV 调用&#xff0c;另外一种是通过onnx runtime(ort)调用。 1、安装cuda 、opencv 等依赖库&#xff0c;具体可以参考 Win1…...

在文件里引用目录文件下的静态资源图片不显示

问题&#xff1a;两种图片路径的指定方式&#xff0c;第一种能展示图片但第二种不能 两个 示例中&#xff0c;图片展示的差异。 在第一个示例中&#xff0c;图片路径是硬编码在 标签的 src 属性中的&#xff1a; <img src"../../assets/img/header01.png" style…...

vue使用 jsplumb 生成流程图

1、安装jsPlumb&#xff1a; npm install jsplumb 2、 在使用的 .vue 文件中引入 import { jsPlumb } from "jsplumb"; 简单示例&#xff1a; 注意&#xff1a;注意看 id 为"item-3"和"item-9"那条数据的连线配置 其中有几个小图片&#x…...

攻坚金融关键业务系统,OceanBase亮相2024金融科技大会

10月15-16日&#xff0c;第六届中新数字金融应用博览会与2024金融科技大会&#xff08;简称“金博会”&#xff09;在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”&#xff0c;围绕“赋能金融高质量发展&#xff0c;金融科技创新前行”…...

《纳瓦尔宝典:财富和幸福指南》读书随笔

最近在罗胖的得到听书中听到一本书&#xff0c;感觉很有启发&#xff0c;书的名字叫《纳瓦尔宝典》&#xff0c;从书名上看给人的感觉应该财富知识类、鸡汤爆棚哪类。纳瓦尔&#xff0c;这个名字之前确实没有听说过&#xff0c;用一句话介绍一下&#xff0c;一个印度裔的硅谷中…...

C++ | STL | 侯捷 | 学习笔记

C | STL | 侯捷 | 学习笔记 文章目录 C | STL | 侯捷 | 学习笔记1 STL概述1.1 头文件名称1.2 STL基础介绍1.3 typename 2 OOP vs. GP3 容器3.1 容器结构分类3.2 序列式容器3.2.1 array测试深度探索 3.2.2 vector测试深度探索 3.2.3 list测试深度探索 3.2.4 forward_list测试深度…...

C函数基础

C语言中的函数教程 在C语言中&#xff0c;函数是一段组织好的、可重复使用的、用于执行特定任务的代码。函数可以提高代码的模块化和可重用性。以下是关于C语言中函数的详细教程。 1. 函数的定义与声明 1.1 函数定义 函数定义包括函数头和函数体。函数头包括函数返回类型、…...

html和css实现页面

任务4 html文件 任务5 htm文件 css文件 任务6 html文件 css文件 任务7 html文件 css文件...

Github_以太网开源项目verilog-ethernet代码阅读与移植(八)——移植工程分享

实验背景 第六篇计划是写项目中各个模块的实现和约束文件的编写&#xff0c;有的小伙伴有裁剪工程的需要&#xff0c;就先分享一个半成品以供参考&#xff0c;由于笔者水平有限&#xff0c;错误肯定会有&#xff0c;望批评指正。 实验内容 移植工程共享 实验步骤 工程一部…...

【大模型实战篇】大模型分词算法BPE(Byte-Pair Encoding tokenization)及代码示例

词元化是针对自然语言处理任务的数据预处理中一个重要步骤&#xff0c;目的是将原始文本切分成模型可以识别和处理的词元序列。在大模型训练任务中&#xff0c;就是作为大模型的输入。传统的自然语言处理方法&#xff0c;如基于条件随机场的序列标注&#xff0c;主要采用基于词…...

低功耗4G模组LCD应用示例超全教程!不会的小伙伴看这篇就够了!

希望大家通过本文的介绍&#xff0c;学会LCD显示屏与Air780E开发板结合使用的方法。利用LCD显示屏&#xff0c;你可以为你的项目增加丰富的显示内容&#xff0c;提升用户体验。记住&#xff0c;实践出真知&#xff0c;赶快动手尝试吧&#xff01;相信这篇教程对你有所帮助~ 本文…...

Java while语句练习 C语言的函数递归

1. /* public static void main(String[] args) {int[] arr {25, 24, 12, 98, 36, 45};int max arr[0];//不能写0for (int i 1; i < arr.length; i) {if (arr[i] > max) {max arr[i];}}System.out.println(max);}*//*public static void main(String[] args) {doubl…...

illustrator免费插件 截图识别文字插件 textOCR

随手可得的截图识别文字插件 textOCR&#xff0c;识别出来的文字可直接输入到illustrator的当前文档中&#xff1a; 执行条件 1、需截图软件支持&#xff0c;推荐笔记截图工具 2、截好图片直接拖入面板即可完成识别 ****后期可完成实现在illustrator选择图片对象完成文字识别。…...

提升数据管理效率:ETLCloud与达梦数据库的完美集成

达梦数据库的核心优势在于其强大的数据处理能力和高可用性设计。它采用先进的并行处理技术&#xff0c;支持大规模的数据操作&#xff0c;同时具备出色的事务处理能力和数据安全保障。此外&#xff0c;达梦数据库还提供了丰富的功能模块&#xff0c;如数据备份、恢复、监控等&a…...

头歌——人工智能(搜索策略)

文章目录 第1关&#xff1a;搜索策略第2关&#xff1a;盲目搜索第3关&#xff1a;启发式搜索 - 扫地机器人最短路径搜索第4关&#xff1a;搜索算法应用 - 四皇后问题 第1关&#xff1a;搜索策略 什么是搜索技术 人类的思维过程可以看作是一个搜索过程。从小学到现在&#xff0…...

gorm.io/sharding改造:赋能单表,灵活支持多分表策略(下)

背景 分表组件改造的背景&#xff0c;我在这篇文章《gorm.io/sharding改造&#xff1a;赋能单表&#xff0c;灵活支持多分表策略&#xff08;上&#xff09;》中已经做了详细的介绍——这个组件不支持单表多个分表策略&#xff0c;为了突破这个限制做的改造。 在上一篇文章中&…...

域渗透AD渗透攻击利用 MS14-068漏洞利用过程 以及域渗透中票据是什么 如何利用

目录 wmi协议远程执行 ptt票据传递使用 命令传递方式 明文口令传递 hash口令传递 票据分类 kerberos认证的简述流程 PTT攻击的过程 MS14-068 漏洞 执行过程 wmi协议远程执行 wmi服务是比smb服务高级一些的&#xff0c;在日志中是找不到痕迹的&#xff0c;但是这个主…...

C++进阶-->继承(inheritance)

1. 继承的概念及定义 1.1 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要手段&#xff0c;他允许我们在保证原有类的特性基础上还进行扩展&#xff0c;通过继承产生的类叫做派生类&#xff08;子类&#xff09;&#xff0c;被继承的类叫做基类&a…...

可视化项目 gis 资源复用思路(cesium)

文章目录 可视化项目 gis 资源复用思路底图、模型替换思路具体操作 可视化项目 gis 资源复用思路 背景&#xff1a; A项目的底图、模型 是现在在做的 B项目所需要的&#xff0c;现在要把 B项目的底图之类的替换成 A系统的 底图、模型替换思路 观察可访问系统的 gis 相关网络请…...

SQL实战测试

SQL实战测试 &#xff08;请写下 SQL 查询语句&#xff0c;不需要展示结果&#xff09; 表 a DateSalesCustomerRevenue2019/1/1张三A102019/1/5张三A18 1. **用一条 ** SQL 语句写出每个月&#xff0c;每个销售有多少个客户收入多少 输出结果表头为“月”&#xff0c;“销…...

Java 基础教学:基础语法-变量与常量

变量 变量是程序设计中的基本概念&#xff0c;它用于存储信息&#xff0c;这些信息可以在程序执行过程中被读取和修改。 变量的声明 在Java中&#xff0c;声明变量需要指定变量的数据类型以及变量的名称。数据类型定义了变量可以存储的数据种类&#xff08;例如整数、浮点数…...

vue3使用element-plus手动更改url后is-active和菜单的focus颜色不同步问题

在实习&#xff0c;给了个需求做个新的ui界面&#xff0c;遇到了一个非常烦人的问题 如下&#xff0c;手动修改url时&#xff0c;is-active和focus颜色不同步 虽然可以直接让el-menu-item:focus为白色能解决这个问题&#xff0c;但是我就是想要有颜色哈哈哈&#xff0c;有些执…...

每天五分钟深度学习框架pytorch:从底层实现一元线性回归模型

本文重点 本节课程我们继续搭建一元线性回归模型,不同的是这里我们不使用pytorch框架已经封装好的一些东西,我们做这个目的是为了更加清楚的看到pytorch搭建模型的本质,为了更好的理解,当然实际中我们还是使用pytorch封装好的一些东西,不要重复造轮子。 模型搭建 #定义…...

编辑器加载与AB包加载组合

解释&#xff1a; 这个 ABResMgr 类是一个资源加载管理器&#xff0c;它用于整合 AB包&#xff08;Asset Bundle&#xff09;资源加载和 编辑器模式资源加载。通过这个管理器&#xff0c;可以根据开发环境选择资源加载方式&#xff0c;既支持 运行时使用Asset Bundle加载&…...

【c++】vector中的back()函数

nums.back() 是 C 中 std::vector 类的一个成员函数&#xff0c;用于获取数组&#xff08;向量&#xff09;中的最后一个元素。以下是一些关于 nums.back() 的详细解释和示例使用&#xff1a; 1. 功能 nums.back() 返回数组 nums 中的最后一个元素。如果数组为空&#xff0c;…...

专门做素菜的网站/自助建站工具

Ubuntu16.04编译poco库概述下载编译解压编译完整编译部分编译编译安装参考文章概述 Poco C库是一系列C类库&#xff0c;类似Java类库&#xff0c;.Net框架&#xff0c;Apple的Cocoa; 侧重于互联网时代的网络应用程序使用高效的&#xff0c;现代的标准ANSI/ISO C&#xff0c;并…...

做网站论文/企业培训十大热门课程

网格搜索算法和K折交叉验证法是机器学习入门的时候遇到的重要的概念。 网格搜索算法是一种通过遍历给定的参数组合来优化模型表现的方法。 以决策树为例&#xff0c;当我们确定了要使用决策树算法的时候&#xff0c;为了能够更好地拟合和预测&#xff0c;我们需要调整它的参数…...

开发网站建设/论坛排名

平时上网总能看到些好的代码和文章&#xff0c;我们一般把它保存为html,但是时间久了这些文件过于分散&#xff0c;很多东西看过&#xff0c;一时想要找到却很困难&#xff0c;还有一些代码在没有语法高亮总是很难看清楚&#xff0c;因此&#xff0c;我编写了此程序。本程序主要…...

wordpress好看的中文主题/营销网站类型

一、分析目的 通过分析2B产品中的团队协作管理软件的对比分析&#xff0c;用于为公司团队协作软件的选型做产考。 二、竞品归属市场概况 2.1.目标用户群及需求 主要面向企业用户&#xff0c;用于解决企业不同地域以及不同职能部门之间的团队协作难点。 2.2.市场规模 中国大概有…...

织梦品牌集团公司网站模板(精)/南昌seo优化公司

扫描某文件夹下所有文件(包括子文件夹中的文件)&#xff0c;使用os.walk;os.walk()方法用于通过在目录树种游走输出在目录中的文件名&#xff0c;向上或者向下。移动复制文件通过os.rename方法&#xff0c;先进行文件是否存在判断&#xff0c;如需更加复杂相同文件判断可以根据…...

内江做网站的公司/百度指数功能模块有哪些

错误提示&#xff1a;System.Data.OleDb.OleDbException: 字段太小而不能接受所要添加的数据的数量。“/”应用程序中的服务器错误。-------------------------------------------------------------------------------- 字段太小而不能接受所要添加的数据的数量。试着插入或粘…...