Redis-持久化(增量模式和全量模式)

文章目录

  • 一、持久化和Redis持久化概念
    • 持久化介绍
    • Redis持久化的介绍
      • 全量模式持久化技术——RDB
      • 增量模式持久化技术——AOF
      • 使用RDB还是AOF?
  • 二、RDB配置以及数据恢复的简单实现
    • RDB快照的工作方式
    • 如何关闭RDB持久化功能
    • 如何模拟Redis服务器数据丢失?然后再如何具体使用RDB生成的dump.rdb文件进行数据恢复?
      • 模拟Redis服务器数据丢失
      • 使用RDB文件进行数据恢复
  • 三、AOF配置以及数据恢复的简单实现
    • AOF重写功能介绍
    • 如何模拟Redis服务器数据丢失?然后再如何具体使用AOF进行数据恢复?
      • 模拟Redis服务器数据丢失
      • 使用AOF文件进行数据恢复
  • 四、Redis数据备份

一、持久化和Redis持久化概念

持久化介绍

在这里插入图片描述
持久化是指将数据从易失性存储(如内存)保存到非易失性存储(如硬盘)的过程。这样做的目的是为了在系统发生故障(如断电、崩溃等)后能够恢复数据。持久化是数据库系统中的一个关键特性,确保数据的持久性和一致性。在计算机科学中,持久化可以通过不同的方式实现,包括写前日志(WAL)、快照、复制等技术。

Redis持久化的介绍

Redis是一个基于内存的高性能键值对数据库,它提供了两种主要的持久化机制:RDB(Redis Database)和AOF(Append Only File)。通过这些机制,Redis能够将内存中的数据保存到硬盘上,以便在服务器重启后恢复数据。Redis持久化的目的是在处理速度和数据安全性之间找到一个平衡点,确保在发生故障时数据不会丢失,同时保持Redis的快速响应能力。
在实际应用中,可以根据数据的重要性和性能需求选择适合的持久化策略。有些用户可能会同时使用RDB和AOF,以获得更快的恢复速度和更高的数据安全性。

全量模式持久化技术——RDB

RDB是Redis提供的一种数据持久化方式,它通过在指定的时间间隔内生成数据集的时间点快照来实现。这些快照以二进制形式存储在磁盘上的一个RDB文件中。RDB文件是Redis数据的压缩表示,通常用于灾难恢复。RDB的优点是恢复速度快,且对于大规模数据集来说,创建和加载RDB文件的效率较高。缺点是可能会丢失最近的数据,因为RDB文件只包含最后一次快照的数据。

RDB的配置项包括:

  • save <seconds> <changes>:设置触发RDB快照的间隔时间和写操作次数。
  • dbfilename <filename>:指定RDB文件的名称。
  • dir <dir>:指定存储RDB文件的目录。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

增量模式持久化技术——AOF

AOF是Redis的另一种持久化方式,它通过记录每次写操作命令来记录数据库的变更。AOF文件以追加的方式写入,因此称为“Append Only File”。当Redis重启时,可以通过重放AOF文件中的命令来恢复数据。AOF提供了更好的数据持久性,因为它可以配置为每次写操作都同步到磁盘,或者以一定的频率异步同步。

AOF的优点是数据安全性高,可以减少数据丢失的风险。缺点是AOF文件可能会比RDB文件大,且恢复速度可能慢于RDB。AOF的配置项包括:

  • appendonly <yes/no>:开启或关闭AOF持久化。
  • appendfilename <filename>:指定AOF文件的名称。
  • appendfsync <always/everysec/no>:设置AOF文件的同步策略。
  • auto-aof-rewrite-percentage <percentage>auto-aof-rewrite-min-size <size>:设置触发AOF文件重写的条件。
    在这里插入图片描述

这句话是关于Redis数据库中AOF(Append Only File)持久化配置的说明。AOF持久化是Redis提供的一种数据持久化方式,它将所有写操作以日志的形式追加到一个文件中,以便在Redis服务器重启时可以从这个文件中恢复数据。

这里的“auto-aof-rewrite-percentage ”和“auto-aof-rewrite-min-size ”是两个配置参数,它们共同定义了何时触发AOF文件的重写操作:

  1. auto-aof-rewrite-percentage :这个参数设置了一个百分比值,用于确定AOF文件大小增长到其原始大小的多少百分比时,触发AOF文件的重写。例如,如果设置为100%,那么当AOF文件的大小是初始大小的两倍时,就会触发重写操作。

  2. auto-aof-rewrite-min-size :这个参数设置了一个最小文件大小,只有当AOF文件的大小超过这个值时,上述的百分比条件才会生效。这可以防止在AOF文件还很小的时候进行不必要的重写操作,从而节省资源。

这两个参数共同作用,确保了AOF文件在达到一定大小和增长比例后,Redis会启动重写操作,以压缩AOF文件,减少磁盘空间的占用,并提高数据恢复的速度。


在这里插入图片描述
在这里插入图片描述

使用RDB还是AOF?

在这里插入图片描述

二、RDB配置以及数据恢复的简单实现

RDB快照的工作方式

在这里插入图片描述

在这里插入图片描述

如何关闭RDB持久化功能

在Redis中关闭RDB持久化功能,你需要修改Redis的配置文件redis.conf。以下是具体步骤:

  1. 打开Redis配置文件
    找到你的Redis配置文件redis.conf。这个文件通常位于/etc/redis/(在Linux系统中)或者Redis安装目录下。

  2. 修改RDB持久化配置
    redis.conf文件中,找到与RDB持久化相关的配置项,如下所示:

    save <seconds> <changes>
    

    这个配置指定了在多长时间内,如果有多少次更新操作,就将内存中的数据集快照保存到磁盘上的RDB文件中。要关闭RDB持久化,你可以将这个配置项设置为空,如下所示:

    save ""
    

    这意味着没有任何条件会触发RDB快照的保存。

  3. 保存并关闭配置文件
    保存你所做的更改,并关闭配置文件。

  4. 重启Redis服务
    为了让配置更改生效,你需要重启Redis服务。你可以使用以下命令来重启Redis服务:

    sudo systemctl restart redis
    

    或者如果你不是使用systemctl管理Redis服务,可以使用:

    sudo service redis restart
    

    或者直接使用redis-cli

    redis-cli shutdown
    redis-server /etc/redis/redis.conf
    
  5. 验证RDB是否已关闭
    重启Redis服务后,你可以检查RDB是否已经关闭。重新启动Redis服务后,如果没有新的dump.rdb文件被创建,那么RDB持久化就已经被关闭了。

请注意,关闭RDB持久化意味着Redis将不再自动将数据快照保存到磁盘,这可能会增加数据丢失的风险。因此,在关闭RDB持久化之前,请确保你了解可能的后果,并考虑是否需要开启AOF持久化作为替代的数据保护措施。

如何模拟Redis服务器数据丢失?然后再如何具体使用RDB生成的dump.rdb文件进行数据恢复?

模拟Redis服务器数据丢失并进行恢复的过程可以帮助你理解如何在真实环境中处理数据丢失的情况。以下是模拟数据丢失和恢复的步骤:

模拟Redis服务器数据丢失

  1. 确保Redis正在运行
    确认Redis服务正在运行中。你可以使用以下命令检查Redis服务的状态:

    redis-cli ping
    

    如果服务正在运行,你应该收到一个 PONG 响应。

  2. 备份当前的RDB文件
    为了模拟数据丢失,首先备份当前的RDB文件。找到Redis的RDB文件(通常在配置文件中指定,如dbfilename dump.rdb),并将其复制到安全的位置:

    cp /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.backup
    
  3. 删除RDB文件
    停止Redis服务,并删除RDB文件以模拟数据丢失:

    redis-cli shutdown
    rm /var/lib/redis/dump.rdb
    
  4. 启动Redis服务
    重新启动Redis服务。由于RDB文件已被删除,Redis将无法从磁盘加载持久化的数据,数据库将为空:

    redis-server /etc/redis/redis.conf
    
  5. 验证数据丢失
    使用redis-cli连接到Redis,并尝试获取一些键的值以确认数据丢失:

    redis-cli get some_key
    

    你应该收到一个 (nil) 响应,表明键不存在。
    (nil来源于拉丁语nihil,意思为“nothing”)

使用RDB文件进行数据恢复

  1. 停止Redis服务
    在恢复数据之前,确保Redis服务是停止的:

    redis-cli shutdown
    
  2. 恢复RDB文件
    将之前备份的RDB文件复制回Redis的数据目录,替换现有的(空的)RDB文件:

    cp /var/lib/redis/dump.rdb.backup /var/lib/redis/dump.rdb
    
  3. 检查RDB文件完整性
    使用redis-check-rdb工具检查RDB文件的完整性:

    redis-check-rdb /var/lib/redis/dump.rdb
    
  4. 启动Redis服务
    重新启动Redis服务:

    redis-server /etc/redis/redis.conf
    
  5. 验证数据恢复
    使用redis-cli连接到Redis,并检查数据是否已经成功恢复:

    redis-cli get some_key
    

    你应该能够收到预期的值,表明数据已从RDB文件成功恢复。

通过这个过程,你可以模拟Redis数据丢失的情况,并学习如何使用RDB文件进行数据恢复。这对于维护生产环境中的数据安全性和可靠性是非常重要的。

在这里插入图片描述

三、AOF配置以及数据恢复的简单实现

AOF重写功能介绍

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如何模拟Redis服务器数据丢失?然后再如何具体使用AOF进行数据恢复?

模拟Redis服务器数据丢失并使用AOF(Append Only File)进行数据恢复的过程如下:

模拟Redis服务器数据丢失

  1. 确保Redis正在运行
    确认Redis服务正在运行中。你可以使用以下命令检查Redis服务的状态:

    redis-cli ping
    

    如果服务正在运行,你应该收到一个 PONG 响应。

  2. 备份当前的AOF文件
    为了模拟数据丢失,首先备份当前的AOF文件。找到Redis的AOF文件(通常在配置文件中指定,如appendfilename appendonly.aof),并将其复制到安全的位置:

    cp /var/lib/redis/appendonly.aof /var/lib/redis/appendonly.aof.backup
    
  3. 删除AOF文件
    停止Redis服务,并删除AOF文件以模拟数据丢失:

    redis-cli shutdown
    rm /var/lib/redis/appendonly.aof
    
  4. 启动Redis服务
    重新启动Redis服务。由于AOF文件已被删除,Redis将无法从磁盘加载持久化的数据,但Redis会启动一个空的数据库:

    redis-server /etc/redis/redis.conf
    
  5. 验证数据丢失
    使用redis-cli连接到Redis,并尝试获取一些键的值以确认数据丢失:

    redis-cli get some_key
    

    你应该收到一个 (nil) 响应,表明键不存在。

使用AOF文件进行数据恢复

  1. 停止Redis服务
    在恢复数据之前,确保Redis服务是停止的:

    redis-cli shutdown
    
  2. 恢复AOF文件
    将之前备份的AOF文件复制回Redis的数据目录,替换现有的(空的)AOF文件:

    cp /var/lib/redis/appendonly.aof.backup /var/lib/redis/appendonly.aof
    
  3. 检查AOF文件完整性
    使用redis-check-aof工具检查AOF文件的完整性:

    redis-check-aof --fix /var/lib/redis/appendonly.aof
    
  4. 启动Redis服务
    重新启动Redis服务,并确保AOF持久化选项被正确设置以继续记录命令:

    redis-server /etc/redis/redis.conf
    
  5. 验证数据恢复
    使用redis-cli连接到Redis,并检查数据是否已经成功恢复:

    redis-cli get some_key
    

    你应该能够收到预期的值,表明数据已从AOF文件成功恢复。

请注意,使用AOF文件进行数据恢复相比RDB文件,可以提供更细粒度的数据恢复,因为它记录了每一个写操作。但是,这也意味着AOF文件可能会比RDB文件大,且恢复过程可能需要更长的时间。在生产环境中,通常建议同时使用RDB和AOF以获得数据持久化和恢复的灵活性。

在这里插入图片描述

四、Redis数据备份

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL 常用语句

目录 我的测试环境 学习文档 进入数据库 基础通关测验 语句-- 查 展示数据库&#xff1b; 进入某个数据库&#xff1b; 展示表&#xff1a; 展示某个表 desc 查询整个表&#xff1a; 查询特定列&#xff1a; 范围查询 等于特定值 不等于 介于 特定字符查询 Li…

MFC图形函数学习05——画椭圆函数

MFC中有一个专门绘制椭圆的函数&#xff0c;其参数与绘制矩形参数相同&#xff0c;实际上所绘制的椭圆就是矩形的内切圆椭圆。 一、绘制椭圆函数 原型&#xff1a;BOOL Ellipse (int x1,int y1,int x2,int y2); 参数&#xff1a;椭圆内切矩形的左上角&#xff08…

Spring3(代理模式 Spring1案例补充 Aop 面试题)

Spring3 代理模式概述介绍什么是代理模式&#xff1f;为什么要使用代理模式&#xff1f;有哪几种代理模式&#xff1f;静态代理基于接口实现的动态代理(JDK自带)基于子类的动态代理 Spring_AOP_01案例补充(添加事务管理)实现完整代码&#xff1a;常规实现&#xff1a;代理实现 …

开源模型应用落地-Qwen2.5-7B-Instruct与TGI实现推理加速

一、前言 目前&#xff0c;大语言模型已升级至Qwen2.5版本。无论是语言模型还是多模态模型&#xff0c;均在大规模多语言和多模态数据上进行预训练&#xff0c;并通过高质量数据进行后期微调以贴近人类偏好。在本篇学习中&#xff0c;将集成 Hugging Face的TGI框架实现模型推理…

Android 使用ninja加速编译的方法

ninja的简介 随着Android版本的更迭&#xff0c;makefile体系逐渐增多&#xff0c;导致make单编模块的时间越来越长&#xff0c;每次都需要半个小时甚至更长时间&#xff0c;其原因为每次make都会重新加载所有mk文件&#xff0c;再生成ninja编译&#xff0c;此完整过程十分耗时…

javaNIO核心知识.中

Channel&#xff08;通道&#xff09; Channel 是一个通道&#xff0c;它建立了与数据源&#xff08;如文件、网络套接字等&#xff09;之间的连接。我们可以利用它来读取和写入数据&#xff0c;就像打开了一条自来水管&#xff0c;让数据在 Channel 中自由流动。 BIO 中的流…

缓存、注解、分页

一.缓存 作用&#xff1a;应用查询上&#xff0c;内存中的块区域。 缓存查询结果&#xff0c;减少与数据库的交互&#xff0c;从而提高运行效率。 1.SqlSession 缓存 1. 又称为一级缓存&#xff0c;mybatis自动开启。 2. 作用范围&#xff1a;同一…

流畅!HTMLCSS打造网格方块加载动画

效果演示 这个动画的效果是五个方块在网格中上下移动&#xff0c;模拟了一个连续的加载过程。每个方块的动画都是独立的&#xff0c;但是它们的时间间隔和路径被设计为相互协调&#xff0c;以创建出流畅的动画效果。 HTML <div class"loadingspinner"><…

【skywalking 】More than 15,000 ‘grammar‘ tokens have been presented. 【未解决请求答案】

问题 skywalking相关版本信息 jdk&#xff1a;17skywalking&#xff1a;10.1.0apache-skywalking-java-agent&#xff1a;9.3.0ElasticSearch : 8.8.2 问题描述 More than 15,000 grammar tokens have been presented. To prevent Denial Of Service attacks, parsing has b…

docker desktop使用ubuntu18.04带图形化+运行qemu

记录一下docker desktop使用ubuntu18.04带图形化命令和使用步骤 1. 下载镜像 参考&#xff1a;【Docker教程】Docker部署Ubuntu18.04(带图形化界面) 命令&#xff1a; docker pull kasmweb/ubuntu-bionic-desktop:1.10.02. 启动镜像 命令&#xff1a; docker run -d -it …

jmeter压测工具环境搭建(Linux、Mac)

目录 java环境安装 1、anaconda安装java环境&#xff08;推荐&#xff09; 2、直接在本地环境安装java环境 yum方式安装jdk 二进制方式安装jdk jmeter环境安装 1、jmeter单机安装 启动jmeter 配置环境变量 jmeter配置中文 2、jmeter集群搭建 多台机器部署jmeter集群…

ai翻唱部分步骤

模型部署 我是用的RVC进行的训练&#xff0c;也可以使用so-vits-svc。 通过百度网盘分享的文件&#xff1a;RVC-beta 链接&#xff1a;https://pan.baidu.com/s/1c99jR2fLChoqUFqf9gLUzg 提取码&#xff1a;4090 以Nvida显卡为例&#xff0c;分别下载“RVC1006Nvidia”和…

算法笔记-Day09(字符篇)

151. 反转字符串中的单词 class Solution {public String reverseWords(String s) {int lens.length(),count0;StringBuffer tempnew StringBuffer();StringBuffer ansnew StringBuffer();for(int i0;i<len;i){if(s.charAt(i)! &&(i0 || s.charAt(i-1) )){while(i&l…

安科瑞电能质量治理产品在光伏电站的应用有效解决了光伏电站面临的功率因数过低和谐波问题-安科瑞黄安南

1. 概述 随着全球对可再生能源需求的增加&#xff0c;分布式光伏电站的建设和发展迅速。然而&#xff0c;分布式光伏电站的运行过程中面临着一系列问题&#xff0c;比如导致企业关口计量点功率因数过低、谐波污染等。这些问题不仅影响光伏电站自身的运行效率&#xff0c;还会对…

Leetcode137只出现一次的数字|| 及其拓展

简述&#xff1a; 虽然标题是这么描述的&#xff0c;但是我们不是一上来就解这道题&#xff0c;先看一下他的子题和扩展 子题&#xff1a;136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 扩展题&#xff1a; 所以我们由易到难&#xff0c;先来看第一道&#x…

leetcode 382.链表随机结点

1.题目要求: 2.题目代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x)…

GaussDB Ustore存储引擎解读

目录 一、数据库存储引擎 二、GaussDB Ustore存储引擎 总结 本文将介绍GaussDB中的Ustore存储引擎&#xff0c;包括Ustore的设计背景、特点介绍和适用业务场景等。 一、数据库存储引擎 数据库的存储引擎负责在内存和磁盘上存储、检索和管理数据&#xff0c;确保每个节点的…

使用 Sortable.js 库 实现 Vue3 elementPlus 的 el-table 拖拽排序

文章目录 实现效果Sortable.js介绍下载依赖添加类名导入sortablejs初始化拖拽实例拖拽完成后的处理总结 在开发过程中&#xff0c;我们经常需要处理表格数据&#xff0c;并为用户提供便捷的排序方式。特别是在需要管理长列表、分类数据或动态内容时&#xff0c;拖拽排序功能显得…

机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

.net core 接口,动态接收各类型请求的参数

[HttpPost] public async Task<IActionResult> testpost([FromForm] object info) { //Postman工具测试结果&#xff1a; //FromBody,Postman的body只有rawjson时才进的来 //参数为空时&#xff0c;Body(form-data、x-www-form-urlencoded)解析到的数据也有所…