Redis两种主要的持久化方式是什么?

        Redis支持两种主要的持久化方式,它们分别是RDB(Redis Database Snapshotting)和AOF(Append Only File)。以下是这两种持久化方式的详细介绍:

 

一、RDB(Redis Database Snapshotting)

  1. 原理:RDB是一种快照持久化方式,它通过定期将Redis内存中的数据集保存到磁盘上的一个二进制文件中,通常命名为dump.rdb。这个文件是一个紧凑的二进制文件,包含了某个时间点的完整数据快照。当Redis重新启动时,它可以加载这个RDB文件,恢复到上次保存的时间点。

  2. 触发机制

    • 手动触发:通过SAVE或BGSAVE命令来实现。SAVE命令会阻塞主进程直到持久化操作完成,而BGSAVE命令则会创建一个子进程来执行持久化操作,主进程继续处理客户端请求。
    • 自动触发:Redis通过判断,如果满足设置的触发条件(如在m秒内,如果有n个键发生改变),则自动执行一次BGSAVE命令。
  3. 优点

    • 性能高效:RDB持久化是通过fork一个子进程来完成的,子进程负责将数据写入磁盘,而主进程继续处理客户端请求,因此对Redis的性能影响相对较小。
    • 恢复速度快:由于RDB文件是二进制格式且包含完整的数据快照,因此在Redis重启时,加载RDB文件的速度非常快。
    • 适合备份:RDB文件是紧凑的二进制文件,节省磁盘空间,非常适合用于备份和灾难恢复。
  4. 缺点

    • 数据丢失风险:如果Redis在两次生成RDB文件之间发生故障,这段时间内的数据将会丢失。
    • CPU和I/O开销:生成RDB文件时,Redis需要进行大量数据的序列化和I/O操作,会对CPU和I/O资源造成一定的压力。

二、AOF(Append Only File)

  1. 原理:AOF是一种日志持久化方式,它记录了服务器执行的所有写操作命令。这些命令会以追加的方式写入到AOF文件中,当Redis需要恢复数据时,只需执行AOF文件中的命令就可以恢复到原来的状态。

  2. 实现步骤

    • 命令追加:将Redis写操作命令追加到AOF缓冲区。
    • 文件写入:周期性地将AOF缓冲区的命令写入AOF文件的内核缓冲区。
    • 文件同步:根据配置的同步策略,将AOF文件缓冲区的内容同步到磁盘。Redis提供了三种文件同步策略:always(每次有命令写入时都立即同步)、everysec(每秒同步一次)、no(让操作系统决定最佳的同步时间)。
  3. 优点

    • 数据安全性高:AOF持久化记录了所有的写操作命令,因此可以提供更高的数据安全性,最多只丢失最后一次写操作的数据。
    • 可读性强:AOF文件是文本格式,具有很好的可读性,方便查看和修改。
  4. 缺点

    • 文件体积大:由于AOF文件记录了所有的写操作命令,因此文件体积可能会比较大。
    • 恢复速度慢:相比于RDB文件,AOF文件的恢复速度较慢,因为需要逐个执行文件中的命令。

三、混合持久化(RDB+AOF)

        Redis 4.0之后支持RDB和AOF两种持久化机制混合使用。混合持久化结合了RDB和AOF的优点,既能够提供较快的恢复速度,又能够保证较高的数据安全性。在混合持久化模式下,Redis会生成一个包含RDB头和AOF尾的文件。当Redis重启时,会先加载RDB部分的数据,然后再执行AOF部分的命令来恢复数据。这种方式能够在较短的时间内恢复数据,同时减少了AOF文件的大小和I/O操作。

        综上所述,Redis的两种持久化方式各有优缺点,适用于不同的业务场景和需求。在实际应用中,可以根据数据安全性需求、恢复速度需求以及资源消耗考虑等因素来选择合适的持久化方式或进行混合使用。

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

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

相关文章

flink cdc oceanbase(binlog模式)

接上文:一文说清flink从编码到部署上线 环境:①操作系统:阿里龙蜥 7.9(平替CentOS7.9);②CPU:x86;③用户:root。 预研初衷:现在很多项目有国产化的要求&#…

C++文件流 例题

问题: 设计一个留言类,实现以下的功能: 1) 程序第一次运行时,建立一个 message.txt 文本文件,并把用户输入的信息存入该文件; 2) 以后每次运行时,都先读取该文件的内容并显示给用户&#xff…

遮挡半透明效果

1、遮挡半透明效果是什么 在游戏开发中,遮挡半透明效果就是物体被挡住的部分,也能呈现出一种半透明效果而被看到(具体效果可以自定义)比如 当角色在建筑物之间穿行时,被遮挡部分能够呈现出半透明效果而被我们看到。遮…

大模型高效推理综述

大模型高效推理综述 1 Introduction2 Preliminaries2.1 transformer架构的LLM2.2 大模型推理过程2.3 推理效率分析 3 TAXONOMY(分类)4.数据级别优化4.1输入压缩4.1.1 提示词裁剪(prompt pruning)4.1.2 提示词总结(prompt summary)…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…

Go语言的基础知识

1, Go 语言介绍 Go 即 Golang,是 Google公司2009年11月正式对外公开的一门编程语言。 根据 Go 语言开发者自述,近10多年,从单机时代的C语言到现在互联网时代的Java,都没有令人满意的开发语言,而C往往给人的感觉是,花了100%的经历…

【UE5 C++课程系列笔记】20——共享指针的简单使用

目录 概念 创建共享指针示例 重设共享指针 共享指针内容转移 共享指针和共享引用的转换 判断共享指针的相等性 共享指针访问成员函数 自定义删除器 概念 共享指针(主要以 TSharedPtr 为例),TSharedPtr 基于引用计数机制来工作&#x…

flux中的缓存

1. cache,onBackpressureBuffer。都是缓存。cache可以将hot流的数据缓存起来。onBackpressureBuffer也是缓存,但是当下游消费者的处理速度比上游生产者慢时,上游生产的数据会被暂时存储在缓冲区中,防止丢失。 2. Flux.range 默认…

Ubuntu网络连接问题(笔记本更换wifi后,虚拟机连不上网络)

1、笔记本更换wifi后,虚拟机的IP地址变了,然后就连不上网络了(主机笔记本连接wifi正常上网) 2、修改子网地址(按照ubutun的ip设置子网掩码) 3、Ubuntu已经显示网络连接正常了,但是就是无法上网&…

如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库教程

简介 本教程将向你介绍如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库。 Apache Cassandra 是一个分布式的 NoSQL 数据库,旨在处理跨多个普通服务器的大量数据,并提供高可用性,没有单点故障。Apache Cassandra 是一个高度可扩展的分布…

Spring MVC实战指南:构建高效Web应用的架构与技巧(三)

响应数据和结果视图(7种) 返回值分类 创建web.xml&#xff08;spring、过滤器解决乱码、配置控制器dispatcherServlet、加载springmvc.xml文件、配置启动加载&#xff09;创建springmvc.xml文件 <!--配置了内容&#xff0c;启动Tomcat服务器的时候&#xff0c;就会被加载--…

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考&#xff0c;oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场&#xff0c;主要考察 nmap的使用已经是否会看输出&#xff0c;以及是否会通过应用查找对应漏…

Linux下编译安装PETSc

本文记录在Linux下编译安装PETSc的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、安装依赖 1.1 安装oneAPI 参见&#xff1a;Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 1.2 安…

深入Android架构(从线程到AIDL)_11 线程之间的通信架构

目录 5、 线程之间的通信架构 认识Looper与Handler对象 主线程丢信息给自己 子线程丢信息给主线程 替子线程诞生Looper与MQ 5、 线程之间的通信架构 认识Looper与Handler对象 当主线程诞生时&#xff0c;就会去执行一个代码循环(Looper)&#xff0c;以便持续监视它的信息…

【中间件】docker+kafka单节点部署---zookeeper模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控&#xff0c;先在测试环境部署单节点kafka验证…

AI-Talk开发板之超拟人

一、说明 运行duomotai_ap sdk下的LLM_chat例程&#xff0c;实现开发板和超拟人大模型进行语音交互&#xff0c;支持单轮和多轮交互。 二、SDK更新 v2.3.0及以上的SDK版本才支持超拟人&#xff0c;如果当前SDK在v2.3.o以下&#xff0c;需要更新SDK。在SDK目录(duomotai_ap)下…

2024年, Milvus 社区的那些事

随着跨年钟声响起&#xff0c;2024 年告一段落。这一年&#xff0c;Milvus GitHub Stars 正式突破 3 万大关&#xff0c;Docker 下载量突破6700w 次&#xff0c;达到一个新的里程碑&#xff0c;在开源向量数据库领域继续引领前行。在这遥遥领先的数据背后&#xff0c;不妨让我们…

docker中使用Volume完成数据共享

情景概述 在一个docker中&#xff0c;部署两个MySQL容器&#xff0c;假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题&#xff1a; 1.无法保证两个MySQL容器中的数据同步。 2.容器删除后&#xff0c;数据就会丢失。 基于以上问题&#xff0c;容…

【期末复习】二、进程管理

1.进程的内存结构🍊 程序加载到内存之后就变成了一个进程,进程在内存当中的一个结构有: 文本段(text section):存放程序代码 栈(stack):存放局部变量和函数返回地址 数据段(data section):存放全局变量和静态变量(static) 堆(heap):程序运行时的动态内存分…

Type-C多口适配器:高效充电与连接解决方案

在科技飞速发展的今天&#xff0c;我们的生活已经离不开各种各样的电子设备&#xff0c;如智能手机、平板电脑、智能手表和无线耳机等。这些设备不仅丰富了我们的数字生活&#xff0c;也带来了更多的充电需求。传统的单一充电口已经难以满足现代人对于便捷性和效率的追求&#…