Redis进阶(4)——结合redis.conf配置文件深入理解 Redis两种数据持久化方案:RDB和AOF

news2025/1/10 23:35:12

目录

  • 引出
  • 持久化方案
    • RDB
    • AOF
  • Redis的持久化方案
    • RDB
      • 如果采用docker stop关闭
      • 如果采用强制关闭
    • AOF
      • 参数设置
      • 混编方式的加载
      • 让aof进行重写
  • 两种持久化方案的优缺点
    • AOF优缺点
    • RDB优势和劣势
  • 总结

引出


1.Redis数据持久化的两种方式,RDB和AOF;
2.RDB采用二进制存储,速度快,但数据可能会丢失;
3.AOF命令追加,可读性强,数据准确,但文件较大,效率低;
4.结合redis.conf深入理解两种持久化方案;

持久化方案

RDB/AOF

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

RDB

以二进方式存储

存储信息到redis(内存),Fork 进程 存储内存中的信息,何时触发存储的过程。

在这里插入图片描述

执行操作

在这里插入图片描述

COW( copy-on-write)

在这里插入图片描述

AOF

使用文本方式存储写内容

在这里插入图片描述

RDB二进制的方式存储,AOF使用文本方式

在这里插入图片描述

默认情况:都启动

在这里插入图片描述

如果文件足够大?达到什么程度,如何处理? (rewrite)

在这里插入图片描述

在这里插入图片描述

Redis的持久化方案

redis4.0开始,配置上有些调整。

之前默认不打开AOF。

RDB

Redis Data base: 内存快照

正常关闭,redis服务会存储最后一次修改

非正常关闭,redis会丢失未存储的数据。

开一个(fork)进程,后台执行存储。

在这里插入图片描述

在这里插入图片描述

docker run -it \
--name redis_6399 \
--privileged \
-p 6399:6379 \
--network pet_docker_net \
--ip 172.18.12.99 \
-v /etc/localtime:/etc/localtime \
-v /usr/local/software/redis/6399/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/software/redis/6399/data/:/data \
-v /usr/local/software/redis/6399/log/redis.log:/var/log/redis.log \
-d redis \
/usr/local/etc/redis/redis.conf

如果采用docker stop关闭

参数设置,30s内,写5次会触发

在这里插入图片描述

进入redis-cli,进行set操作,卡点30s

在这里插入图片描述

关闭6399

在这里插入图片描述

重新启动,发现数据都在

在这里插入图片描述

原因分析

在这里插入图片描述

如果采用强制关闭

在这里插入图片描述

[root@localhost ~]# ps au | grep redis-server
polkitd   14172  0.1  0.2  52812  9832 pts/7    Ssl+ 20:47   0:00 redis-server 0.0.0.0:6379
root      38838  0.0  0.0 112824   976 pts/15   S+   20:54   0:00 grep --color=auto redis-server
[root@localhost ~]# kill -9 14172
[root@localhost ~]# 

出现数据丢失,以及原因分析

在这里插入图片描述

日志查看

在这里插入图片描述

AOF

日志方式存储非读命令.

参数设置

打开AOF

在这里插入图片描述

关于AOF的备份频率

在这里插入图片描述

参数解释

在这里插入图片描述

关于AOF的重写rewrite

在这里插入图片描述

达到64Mb的时候会rewrite,重写一下

在这里插入图片描述

混编方式的加载

数据加载顺序(混合方式)

  1. 读取aof
  2. 混编方式: 在aof文件里面,既有aof,也有rdb;rdb在尾部,先被读出来;aof+rdb
1:M 09 Aug 2023 10:39:36.429 * Reading RDB preamble from AOF file...
1:M 09 Aug 2023 10:39:36.429 * Loading RDB produced by version 6.2.6
1:M 09 Aug 2023 10:39:36.429 * RDB age 6668 seconds
1:M 09 Aug 2023 10:39:36.429 * RDB memory usage when created 1.89 Mb
1:M 09 Aug 2023 10:39:36.429 * RDB has an AOF tail
1:M 09 Aug 2023 10:39:36.429 # Done loading RDB, keys loaded: 3, keys expired: 0.
1:M 09 Aug 2023 10:39:36.429 * Reading the remaining AOF tail...
1:M 09 Aug 2023 10:39:36.429 * DB loaded from append only file: 0.001 seconds
1:M 09 Aug 2023 10:39:36.429 * Ready to accept connections

在这里插入图片描述

appendonly yes

在这里插入图片描述

混编打开后,将AOF重写后文件大小变小

在这里插入图片描述

让aof进行重写

原本重写设置

在这里插入图片描述

后台命令让redis重写

在这里插入图片描述

查看日志

在这里插入图片描述

查看混编后的文件

在这里插入图片描述

两种持久化方案的优缺点

AOF优缺点

优点:数据准确缺点:慢,文件大,效率低
默认是每秒fsync一次。这样最多丢失1秒数据在相同的数据集下,AOF文件的大小一般会比RDB文件大。
AOF日志文件是一个纯追加的文件。就算服务器突然Crash,也不会出现日志的定位或者损坏问题在某些fsync策略下,AOF的速度会比RDB慢。通常fsync设置为每秒一次就能获得比较高的性能,而在禁止fsync的情况下速度可以达到RDB的水平。
当AOF文件太大时,Redis会自动在后台进行重写。重写很安全,因为重写是在一个新的文件上进行,同时Redis会继续往旧的文件追加数据。
AOF把操作命令以简单易懂的格式一条接一条的保存在文件里,很容易导出来用于恢复数据。

RDB优势和劣势

优势:快劣势:数据可能有缺失
一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。
性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。
相比于AOF机制,如果数据集很大,RDB的启动效率会更高。

总结

1.Redis数据持久化的两种方式,RDB和AOF;
2.RDB采用二进制存储,速度快,但数据可能会丢失;
3.AOF命令追加,可读性强,数据准确,但文件较大,效率低;
4.结合redis.conf深入理解两种持久化方案;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP8的字符串操作1-PHP8知识详解

字符串是php中最重要的数据之一,字符串的操作在PHP编程占有重要的地位。在使用PHP语言开发web项目的过程中,为了实现某些功能,经常需要对某些字符串进行特殊的处理,比如字符串的格式化、字符串的连接与分割、字符串的比较、查找等…

redis设置database 不生效剖析

设置database 不生效剖析 前言配置加载类问题commons-pool 对象池 主页传送门:📀 传送 前言 事情是这样的 今天在拉取了同事的代码做redis缓存设置的时候,发现即使已经设置了database, 但是存数据的时候还是用的默认0数据库。这引起了我的好…

Java-类型和变量(基于C语言的补充)

一个简单的Java程序 args){ System.out.println("Hello,world"); } }通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成: 1.源文件(扩展名为*.java):源文件带有类的定义…

通过金字塔模型拥抱企业数字化转型

企业要实施成功的数字化营销转型改革,需要践行如下金字塔模型,从上至下依次是认知,应用,流程和组织,我们一一来拆解。 01 认知层 处于最顶层的是认知层,数字化营销的认知没有建立,很难实施彻头…

用python来爬取某鱼的商品信息(2/2)

目录 上一篇文章 本章内容 设置浏览器为运行结束后不关闭(可选) 定位到搜索框的xpath地址 执行动作 获取cookie 保存为json文件 修改cookie的sameSite值并且导入cookie 导入cookie(出错) 导入cookie(修改后&…

阿里云云主机_ECS云服务器_轻量_GPU_虚拟主机详解

阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等,阿里云百科来详细说下阿里云云主机详解: 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…

vitis如何更新xsa?

在zynq调试时,经常需要更新xsa文件,更新步骤如下: 在platform_project选择Update Hardware Specation 选择对应的xsa文件 提示更新完成 复位BSP 把platform_project clean一下,然后重新build 再refresh application project&…

项目实战 — 消息队列(9){编写demo程序}

消息队列服务器核心功能就是,提供了虚拟主机,交换机, 队列,消息等概念的管理,实现三种典型的消息转发方式,可以实现跨主机/服务器之间的生产者消费模型。 这里,就编写一个demo,实现…

动动小手搭建私人大模型人工智能私人助理

引言: 去年12月OpenAI公司的ChatGPT3.5彻底引爆人工智能圈,今年国内大公司争相进入大模型的赛道,打造自己的大模型。前些日子的世界人工智能大会上,可谓是百模大战,热闹纷呈。 ChatGPT的出现,的确给人们带…

(2)linux虚拟机配置中文输入法和如何下载软件

(一)配置中文输入法: 1、sudo apt-get install fcitx,安装fcitx框架,安装完成之后,选择该框架 2、接下来输入sudo apt-get install fcitx fcitx-googlepinyin,安装谷歌输入法之后,重…

[LitCTF 2023]1zjs

这里一点想法没有看看源代码 查找flag没有发现 查找.php 有所发现 看起来是一种加密方式,查找 jsfuck NSSCTF{bd1[]f7[]3[]c8[]-9[]c5[]c-4[]c6[]4[]-a7[]2[]7[]-6[]7[]3[]b4[]4[]2[]6[]efbc}

Programming abstractions in C阅读笔记:p107-p110

《Programming Abstractions In C》学习第46天,p107-p110,3.1小节——“The concept of interface”,总结如下: 一、技术总结 1.client p108,调用library的program称为client。 2.interface p108,“To do …

nbcio-boot升级到3.1后出现online表单新增报错

nbcio-boot升级springboot、mybatis-plus和JSQLParser后出现新增online表单的时候报错,如下: 2023-08-13 21:18:01.292 [http-nio-8080-exec-12] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - Handler dispat…

MEC | 条款3 绝对不要以多态(polymorphically)方式处理数组

条款3 绝对不要以多态(polymorphically)方式处理数组 文章目录 条款3 绝对不要以多态(polymorphically)方式处理数组继承Example 打印基类-派生类数组传入BalencedBST 数组到函数 删除基类-派生类数组>>>>> 欢迎关…

8.1.tensorRT高级(3)封装系列-模型编译过程封装,简化模型编译代码

目录 前言1. 模型编译过程封装2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-模型编译过程封装…

详细讲解如何在github上编辑个人主页?

在 GitHub 上编辑个人主页可以让您展示您的项目、技能和个人信息,以及与其他开发者互动。以下是详细的步骤来在 GitHub 上编辑个人主页: 创建 GitHub 账户 如果您还没有 GitHub 账户,首先需要注册一个。 登录到 GitHub 使用您的用户名和密…

StringBuilder的基本操作

1、为什么要学习StringBuilder? 1.1、String拼接100万次 String对象做字符串拼接,字符串直接拼接100万次,运行速度非常非常的慢,当数据量比较大的时候,一般不用字符串直接拼接 package stringdemo;public class StringTest {publ…

数据结构:选择排序

简单选择排序 选择排序是一种简单直观的排序算法。首先在未排序序列中找到最大(最小)的元素,存放到排序学列的其实位置,然后在剩余的未排序的元素中寻找最小(最大)元素,存放在已排序序列的后面…

9.利用matlab完成 泰勒级数展开 和 符号表达式傅里叶变换和反变换 (matlab程序)

1.简述 matlab之傅里叶变换和逆变换 首先生成一个方波(或者其他组合波形),然后对这个信号做傅里叶变换,拆解到频域,可以看到这个信号是由哪些频率的信号叠加而来。 然后把频域信号,用傅里叶逆变换恢复到时…

Grafana Prometheus 通过JMX监控kafka 【2023最新方式】

第三方kafka exporter方案 目前网上关于使用Prometheus 监控kafka的大部分资料都是使用一个第三方的 kafka exporter,他的原理大概就是启动一个kafka客户端,获取kafka服务器的信息,然后提供一些metric接口供Prometheus使用,随意它…