Redis持久化策略和优缺点

首先来谈谈什么是持久化?

持久化就是将数据从内存保存到磁盘的过程,其目的就是为了防止数据丢失。

为什么要这样做?因为内存中的数据在重启服务器后就会丢失,而磁盘上的数据则不会,因此为了系统稳定,我们就需要把数据进行持久化。

1、Redis 持久化方式

Redis 持久化方式主要有以下 3 种:

  • 快照方式(RDB,RedisDataBase):将某个时刻的内存数据,以二进制的方式写入磁盘;由于是二进制写入磁盘,因此效率较高,但是一旦Redis 意外终止,就会导致数据部分丢失;
  • 文件追加方式(AOF,AppendOnlyFile):记录所有的操作命令,并以文本的形式追加到文件中;由于是文本形式写入,因此效率较低,又由于AOF 会记录操作指令,因此保证了数据的完整性。
  • 混合持久化方式:Redis 4.0 之后新增的⽅式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前数据以 RDB形式写入文件的开头,在将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能加降低数据丢失的风险。

2、持久化策略的设置

在连接服务器终端之后使用 redis-cli 命令开启 Redis 客户端,通过以下命令使用不同的持久化策略:

  • RDB(快照方式):当 AOF 和混合持久化都没有开启的情况下默认是 RDB 持久化策略;
  • AOF(文件追加方式):在没有开启混合持久化的情况下,使用 config set appendonly yes 开启;
  • 混合持久化:使用 config set aof-use-rdb-preamble yes 直接开启混合持久化。

3、不同持久化策略之间的优缺点

3.1、RDB(快照方式)

优点:
RDB 内容为二进制数据,占用内存小,更紧凑,适合作为备份文件。
RDB 对灾难恢复非常有用,他是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务。
RDB 可以提高 Redis 的运行速度,每次持久化 Redis 主进程都会 fork() 一个子进程,进行数据持久化到磁盘,Redis 主进程不会执行磁盘 I/O 等操作。
与 AOF 格式文件相比, RDB 文件可以更快的重启,因为文本形式写入磁盘效率低于二进制方式写入磁盘。

缺点:
由于 RDB 只能保存某个时间段的数据,因此一旦中途 Redis 服务意外终止,则会丢失一段时间的 Redis 数据。
RDB 需要经常 fork() 才能使用子进程将其持久化在硬盘上,因此一旦数据集过大, fork()可能会很耗时,并且如果再加上 CPU 性能不佳,可能会导致 Redis 停止为客户端服务几毫秒甚至一秒钟。

3.2、AOF(文件追加方式)

优点:
AOF 持久化保存的数据更加完整。因为 AOF 提供了三种保存策略:“每次操作保存、每秒种保存一次、跟随系统的持久化策略保存”,其中每秒保存一次,从数据的安全性和性能两方面考虑都是个不错的选择,也是 AOF 的默认策略,即使发生意外,最多丢失 1s 钟的数据;
AOF 采用命令追加的写入方式,所有不会出现文件损坏问题,即使由于意外情况,也可以使用 redis-check-aof 工具轻松修复;
AOF 持久化文件,跟容易解析,因为他是把所有 Redis 键值操作命令,以文件的方式存入磁盘,即使不小型使用 flushall 命令删除了所有的键值信息,只要使用 AOF 文件,删除最后的 flushall 命令,重启 Redis 即可恢复之前误删的数据。

缺点:
对于相同数据集来说,AOP 文件要大于 RDB文件。
在 Redis 负载比较高的情况下, RDB 比 AOF 性能更好。
RDB 使用快照持久化 Redis 数据,而 AOF 使用命令追加到 AOF 文件中,因此, RDB 比 AOF 更健壮。

3.3、混合持久化

优点:
结合了 RDB 和 AOF 持久化的优点,开头为 RDB 格式,使得 Redis 可以跟快启动,同时结合 AOF 优点,降低了大量丢失数据的风险。

缺点:
AOF 文件中添加了 RDB 格式的内容,使得 AOF 文件可读性变的更差。
兼容性差。混合持久化 AOF 文件,就不能用在 Redis 4.0 之前的版本了。

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

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

相关文章

蓝桥杯刷题记录之黄金树

思路 需要注意的就是它的节点编号是从1开始的,Node的l和r是int类型,而不是Node类型,因为题目在给定l和r的时候,给的是下标而不是一个node对象,其余的就没有了,树的遍历这个贼简单 代码 import java.util…

学习AIGC大模型的步骤

学习大模型及相关技术,您可以按照以下步骤进行: 基础知识储备: •理解机器学习的基本概念,包括监督学习、无监督学习、强化学习等。 •掌握深度学习的基础理论,包括神经网络的工作原理、反向传播、激活函数等。 •学习…

产品经理面试自我介绍,这3大错误千万别犯!

金三银四求职季,你是不是也有面试的冲动!但面试并不是头脑一热就能取得好结果,在此之前,必须得有周全的准备,才能应对好面试官的“连环问”! 所以,今天这篇产品经理面试干货分享给大家~ 今天文…

最大的开源大模型:马斯克的Grok-1可供企业商用

由马斯克xAI团队研发的最大的开源大语言模型Grok-1,从头开始训练的总参数量为314B(3140亿)的混合专家(MoE)模型,其规模超过ChatGPT-3.5,目前Grok背后代码和权重架构已全部开放上线在GitHub。 下…

[简单粗暴]一文彻底搞懂Java泛型中的PECS原则(在坑里躺了多年终于爬出来了)

[简单粗暴]一文彻底搞懂Java泛型中的PECS原则(在坑里躺了多年终于爬出来了) 两种限定通配符 表示类型的上界&#xff0c;格式为&#xff1a;<&#xff1f; extends T>&#xff0c;即类型必须为T类型或者T子类表示类型的下界&#xff0c;格式为&#xff1a;<&#xf…

SqlServer服务启动报错10013

错误提示&#xff1a;MSSQLSERVER 服务启动异常不错10013 Windows不能在本地计算机启动SQLServer(MSSQLSERVER)。有关更多信 息&#xff0c;查阅系统事件日志。如果这是非Microsoft服务&#xff0c;请与服务厂商联系&#xff0c;并 参考特定服务错误代码10013。 解决 1、先禁用…

蓝桥杯 2023 省A 颜色平衡树

树上启发式合并是一个巧妙的方法。 dsu on tree&#xff0c;可以称为树上启发式合并&#xff0c;是一种巧妙的暴力。用一个全局数组存储结果&#xff0c;对于每棵子树&#xff0c;有以下操作&#xff1a; 先遍历轻儿子&#xff0c;处理完轻儿子后将数组清零&#xff08;要再…

网络七层模型之数据链路层:理解网络通信的架构(二)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Day14-集合(二)--什么是数据结构

什么是数据结构 计算机存储和组织数据的方式 数据结构概述 数据结构是计算机底层存储、组织数据的方式 是指数据相互之间是以什么方式排列在一起的 数据结构是为了更加方便管理和使用数据&#xff0c;需要结合具体的业务场景来进行选择 精心选择的数据结构可以带来更高的运…

Linux相关命令(1)

1、找出文件夹下包含 “aaa” 同时不包含 “bbb”的文件&#xff0c;然后把他们重新生成一下。要求只能用一行命令。 find ./ -type f -name "*aaa*" ! -name "*bbb*" -exec touch {} \;文件系统操作命令 df&#xff1a;列出文件系统的整体磁盘使用情况 …

2024/3/23 蓝桥杯

P1102 A-B 数对 二分 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {//A-BCScanner sc new Scanner(System.in);int n sc.nextInt();int C sc.nextInt();int[] res new int[n1];for(int i1;i<n;i) {…

普通用户无法连接到docker服务

环境 tt:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy问题 tt:~$ sudo apt install docker.io -ytt:~$ docker info Client:Version: 24.0.5Context: d…

小孔平板应力集中问题matlab有限元编程【源码+PPT讲义】|三节点三角形单元|平面单元|稀疏矩阵 |Comsol网格

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

样本投递技术

投递技术 APT 组织主要以邮件作为投递载体&#xff0c;邮件的标题、正文和附件都可能携带恶意代码。主要的方式是附件是漏洞文档、附件是二进制可执行程序和正文中包含指向恶意网站的超链接这三种。 APT攻击的载荷类型&#xff1a; 文档类&#xff1a;主要是office文档、pdf文…

NEFU 《JAVA语言程序设计》实验三 类的继承、接口和多态

1. (程序题)设计具有工作能力接口Workable&#xff0c;声明抽象方法updateName()&#xff0c;通过传入的字符串修改姓名&#xff1b;声明抽象方法calculateSalary()&#xff0c;返回计算的薪资 设计员工实体类Employee&#xff0c;公司下所有员工均包含&#xff0c;姓名&#x…

数组——LEETCODE的第35题(二分法与lower_bound函数)

数组——LEETCODE的第35题&#xff08;二分法与lower_bound函数&#xff09; 本文主要是根据leetcode 35题所写的关于数组的相关内容&#xff0c;主要包括&#xff1a; 数组的的特性leetcode第35题二分法的解题lower_bound函数的使用 文章目录 数组——LEETCODE的第35题&#x…

面试题(一)

目录 1.JDK、JRE、JVM之间的区别 2.hashcode()和equals()的区别 3.String、StringBuffer、StringBuilder的区别 4.泛型中extends和super的区别 5.和equals()的区别 6.重写和重载的区别 7.List和Set的区别 8.ArrayList和LinkedList区别 9.谈谈ConcurrentHashMap的原理 …

LangChain核心模块 Retrieval——文档加载器

Retrieval ​ 许多LLM申请需要用户的特定数据&#xff0c;这些数据不属于模型训练集的一部分&#xff0c;实现这一目标的主要方法是RAG(检索增强生成)&#xff0c;在这个过程中&#xff0c;将检索外部数据&#xff0c;然后在执行生成步骤时将其传递给LLM。 ​ LangChain 提供…

Unsafe的CAS操作及线程park与unpark

如下是一个参照AQS进行的一个加锁及解锁的简单实现&#xff1a; 多线程并发进行同步业务操作&#xff1b;加锁&#xff1a;尝试进行cas 0->1操作&#xff1b;如果加锁成功则进行业务处理&#xff0c;然后进行锁释放 1->0&#xff0c;然后将列头的线程进行唤醒&#xff1…

GDAL中的地理坐标系、投影坐标系及其相互转换

目录 地理坐标系 国内常用地理坐标系 投影坐标系 国内常用投影坐标系&#xff08;不推荐使用&#xff09; 坐标转换 地理坐标转为投影坐标 投影坐标转为地理坐标 地理坐标系 原理参考这篇文章&#xff1a;地理坐标系与投影坐标系区别与联系 https://yunxingluoyun.blog.…