Redis的持久化介绍及其Linux配置介绍

news2024/9/23 16:32:58

1. Redis的持久化

Redis的数据都是存储在内存中,为了数据的永久保存,需要把数据同步到硬盘上,这个过程就叫做持久化. Redis的持久化存在有两种方式: rdb方式,aof方式,这两种方式可以单独使用,也可以综合使用.

  1. rdb持久化方式: 是在指定的时间间隔写入硬盘
  2. aof持久化方式:是以日志,记录每一个操作,服务器启动后,根据日志来构建数据.

Redis支持两种方式的持久化,一种是RDB方式(默认),一种是AOF方式。可以单独使用其中一种或将二者结合使用。

1.1 redis持久化之RDB方式

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照(snapshot)。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。

1.1.1 执行时机

RDB持久化在四种情况下会执行:

  • 执行save命令
  • 执行bgsave命令
  • Redis停机时
  • 触发RDB条件时

1)save命令

执行下面的命令,可以立即执行一次RDB:

save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。

2)bgsave命令

下面的命令可以异步执行RDB:

这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。

3)停机时

Redis停机时会执行一次save命令,实现RDB持久化。

4)触发RDB条件

Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB

save 900 1  

save 300 10  

save 60 10000

1.1.2 RDB原理

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模的快照,且处于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效.RDB的缺点就是最后一次持久化后的数据可能丢失.

具体流程如下:

1) redis 客户端执行 bgsave 命令或者自动触发 bgsave 命令;

2) 主进程判断当前是否已经存在正在执行的子进程,如果存在,那么主进程直接返回;

3) 如果不存在正在执行的子进程,那么就 fork 一个新的子进程进行持久化数据,fork 过程是阻塞的,fork 操作完成后主进程即可执行其他操作;

4) 子进程先将数据写入到临时的rdb文件中,待快照数据写入完成后再原子替换旧的 rdb文件;

5) 同时发送信号给主进程,通知主进程 rdb 持久化完成,主进程更新相关的统计信息

fork采用的是copy-on-write技术:

  • 当主进程执行读操作时,访问共享内存;
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

RDB方式是redis默认支持的,总结如下:

1) 整个过程中,主进程是不进行任何 IO 操作的,这就确保了极高的性能

2) 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那 RDB 方式要比 AOF 方式更加的高效

3) RDB 的缺点是最后一次持久化后的数据可能丢失

1.1.3配置方法

 

 

1.2 redis持久化之AOF方式

AOF: 以日志的形式来记录每个写操作,将redis执行过的所有写指令记录下来(不会记录读指令),只许追加文件但是不可以改写文件,redis启动之初会读取该文件(appendonly.aof)重新构建数据,换而言之:redis重启的话就是根据日志文件的内容将写指令从头到尾执行一次,以完成数据的恢复工作.

解读上图

1) 客户端的请求写命令会被 append 追加到 AOF 缓冲区内

2) AOF 缓冲区根据 AOF 持久化策略[always,everysec,no]将操作 sync 同步到磁盘的 AOF 文件 中

3) AOF 文件大小超过重写策略或手动重写时,会对 AOF 文件 rewrite 重写,压缩 AOF 文件容量

4) Redis 服务重启时 ,会重新 load 加载 AOF 文件中的写操作达到数据恢复的目的

AOF方式,以日志记录每一个操作。Redis可以通过日志去还原数据。

优势: 安全性相对RDB方式高很多,它记录了每一个操作

劣势:效率相对于RDB方式低很多。

Redis默认是关闭AOF方式的。

我们查看redis的配置文件,找到下图的位置:

appendonly no 默认关闭aof方式,我们修改为yes就开启

appendfilename 就是aof方式的日志文件

再往下拉:

上图的配置是aof的三种同步策略:

always 同步持久化,每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好

everysec 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案

no 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

三种策略对比:

1.2.1 aof重写机制

因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

如图,AOF原本有三个命令,但是set num 123 和 set num 666都是对num的操作,第二次会覆盖第一次的值,因此第一个命令记录下来没有意义。

所以重写命令后,AOF文件内容就是:mset name jack num 666

原理

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。 AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

触发条件

在 APPEND ONLY MODE模块下有两条默认配置:

这两条配置就是触发重写aof文件的条件,第一个表示文件大小达到前一次保存文件的一倍,第二个表示aof文件大小最少达到64MB,两个条件必须同时满足。

3.3 RDB与AOF对比

3.3.1 RDB

采用的是快照机制进行的持久化

优点

  • RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份
  • ==RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快(因为其文件要比AOF的小)==
  • ==RDB的性能要比AOF更好==

缺点

  • ==RDB的持久化不够及时(一定时间间隔),可能会存在数据丢失,不便于数据库的重构(因为是快照的某一时刻最终结果,不清楚数据的变化过程)==
  • RDB持久化时如果文件过大可能会造成服务器的阻塞,停止客户端请求

3.3.2 AOF

采用append模式,不断的记录数据的变化过程

优点

  • ==AOF的持久性更加的耐久(可以每秒 或 每次操作保存一次)==
  • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松,数据几乎不会丢失,便于数据库的重构。
  • AOF是增量操作

缺点

  • ==对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积,而且AOF文件只会越来越大(即使是删除命令也会被记录)==
  • ==根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB.==

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

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

相关文章

【Python使用】嘿马python基础入门全体系教程第5篇:容器:字符串、列表、元组、字典,<1>添加元素(“增“append

本教程的知识点为:计算机组成 计算机是由什么组成的? 1. 硬件系统: 2. 软件系统: 目标 运算符的分类 1. 算数运算符 2. 赋值运算符 3. 复合赋值运算符 判断语句和循环语句 if嵌套 1. if嵌套的格式 2. if嵌套的应用 if嵌套执行流程…

链家web安全面试经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s…

MyBatis使用:动态SQL

1、目标 本文的主要目标是使用MyBatis的动态SQL 2、最好使用Param注解 Data public class BaseEntity {protected String id;protected Integer createUserId;protected String createDateTime;}Data public class News extends BaseEntity {private String title;}RestCont…

【C++ Primer Plus习题】5.8

问题: 解答: #include <iostream> #include <cstring> using namespace std;#define SIZE 20int main() {char words[20];char done[] "done";int count 0;while (true){cout << "请输入单词:" << endl;cin >> words;if …

Open3D 最近点约束的体素滤波(35)

Open3D 最近点约束的体素滤波(35) 一、算法介绍二、算法步骤三、具体代码四、实现效果一、算法介绍 最近点约束的体素滤波,是指在每个体素中,选择距离体素中心最近的原始点作为滤波结果,这样保留的是原始点位置。相比于体素滤波的重心点重新计算,或者八叉树体素中心,更加…

进阶岛 茴香豆:企业级知识库问答工具

一、任务介绍 在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手&#xff0c;并使用 Gradio 界面完成 2 轮问答&#xff08;问题不可与教程重复&#xff0c;作业截图需包括 gradio 界面问题和茴香豆回答&#xff09;。知识库可根据根据自己工作、学习或感兴趣的内…

【复旦微FM33 MCU 外设开发指南】外设篇1——GPIO

前言 本系列基于复旦微FM33系列单片机的DataSheet编写&#xff0c;旨在提供一些开发指南。 本文章及本系列其他文章将持续更新&#xff0c;本系列其它文章请跳转【复旦微FM33 MCU 外设开发指南】总集篇 本文章最后更新日期&#xff1a;2024/08/25 文章目录 前言GPIO工作时钟…

PowerShell 一键配置IP

前言 实现一键更改Windows 网卡IP,子网,网关,dns,重命名网卡,获取的接口索引名称,获取接口名称,刷新组策略,刷新系统,脚本可重复配置,,以下环境我是两个网卡配置IP 前提条件 开启wmi,配置网卡,参考 创建更改网卡脚本 实验环境,两个网卡,清除默认,重命名(配置)…

程序员的双重挑战:高效编码与持续学习

在快速变化的编程世界中&#xff0c;程序员们面临着双重挑战&#xff1a;一方面要高效完成日常编码任务&#xff0c;另一方面需要不断学习新技术和深化专业知识&#xff0c;以适应日益复杂的项目需求。如何在这两者之间找到平衡&#xff0c;是许多程序员都感到困惑的问题。本文…

韩国云主机玩游戏性能怎么样

韩国云主机玩游戏性能怎么样&#xff1f;韩国云主机作为高性能的计算服务&#xff0c;为全球游戏玩家提供了一种新的游戏体验方式。用户所关注的韩国云主机在游戏性能方面的表现&#xff0c;可以从多个维度进行详细评估。下面将具体分析韩国云主机用于玩游戏的性能特点&#xf…

卸载通过pip安装的所有Python包的详细指南

卸载所有通过pip安装的Python包的方法总结&#xff08;Windows系统&#xff09; 方法 1: 使用 pip freeze 和 requirements.txt 步骤: 导出依赖到requirements.txt文件: pip freeze > requirements.txt这个命令会将当前环境中所有已安装的Python包及其版本号输出到requirem…

DeepKE-LLM框架介绍及简单使用

简介 DeepKE 作为一个全面的知识提取工具包&#xff0c;不仅在构建知识图谱方面展现出卓越性能&#xff0c;还针对多种场景&#xff08;如cnSchema、低资源环境、文档级处理和多模态分析&#xff09;提供了强大支持。它能高效提取实体、关系和属性&#xff0c;并为初学者提供了…

论文降重,Kimi如何助你一臂之力?

在学术研究的浪潮中&#xff0c;原创性和学术诚信是每位研究者必须坚守的灯塔。然而&#xff0c;随着研究领域的不断扩展和深化&#xff0c;论文写作过程中难免会遇到内容重复的问题&#xff0c;这不仅影响论文的独创性&#xff0c;也对学术声誉构成挑战。本文将介绍Kimi的核心…

幂等方案分析

幂等性介绍 幂等是一个数学上的概念 f(n) 1^ n 无论n为多少 f(n)的值永远为1 在我们的编程中定义为: 无论对某一个资源操作了多少次&#xff0c;其影响都应是相同的。 以SQL为例&#xff1a; select * from table where id1。此SQL无论执行多少次&#xff0c;虽然结果有可…

prometheus入门(简单使用)

架构与组成 先上一张官网的架构图&#xff1a; Prometheus的构成&#xff1a; The Prometheus ecosystem consists of multiple components, many of which are optional: the main Prometheus server which scrapes and stores time series data&#xff08;Prometheus serv…

基本数据类型及命令

String String 是Redis最基本的类型&#xff0c;Redis所有的数据结构都是以唯一的key字符串作为名称&#xff0c;然后通过这个唯一的key值获取相应的value数据。不同的类型的数据结构差异就在于value的结构不同。 String类型是二进制安全的。意思是string可以包含任何数据&…

三大低速总线之SPI

三大低速总线之SPI 文章目录 三大低速总线之SPI前言一、基本概念1.1 物理层1.2 协议1.3 传输过程 二、实战FLASH芯片2.1 SPI-Flash 全擦除实验2.1.1 程序设计 2.2 SPI-Flash 扇区擦除实验2.2.1 整体设计 2.3 SPI-Flash 页写实验2.3.1 操作时序 2.4 SPI_Flash 读数据实验2.4.1 时…

rasterization

在cityfm中有说道 Raster is a rasterization function that maps a closed polygon, represented as an ordered list of nodes, to a binary image 要在Python中实现一个将多边形映射到二值图像的光栅化函数&#xff0c;你可以按照以下步骤进行&#xff1a; 创建一个函数&…

网络安全 day3 --- WAFCDNOSS反向代理正向代理负载均衡

WAF&#xff08;网页防火墙&#xff09; 原理&#xff1a;Web应用防火墙&#xff0c;旨在提供保护 影响&#xff1a;常规Web安全测试手段会受到拦截 实验&#xff1a;Windows2022 IIS D盾 作用是防范网络安全入侵。 如下图&#xff0c;我们在网站目录下放一个简单的一句话木马…

JavaScript初级——文档的加载

1、浏览器在加载一个页面时&#xff0c;是按照自上向下的顺序加载的&#xff0c;读取到一行就运行一行&#xff0c;如果将 script 标签写到页面的上边&#xff0c;在代码运行时&#xff0c;页面还没有加载&#xff0c;页面没有加载DOM对象也没有加载&#xff0c;会导致无法获取…