当前位置: 首页 > news >正文

[面试]关于Redis 的持久化你了解吗

        Redis的持久化是指Redis服务器在关闭或重启时,将内存中的数据保存到磁盘上的一种机制。Redis支持多种持久化方式。


一、RDB(Redis Database)持久化

        RDB持久化是Redis默认采用的持久化方式,它将Redis在某个时间点的数据保存到磁盘上的快照。RDB文件是二进制文件,通过压缩算法来减小文件大小。

工作原理:RDB持久化是通过fork子进程来实现的,将当前内存中的数据直接写入到一个临时文件中,然后再替换现有的RDB文件。在fork子进程之前,Redis会将所有的写操作转发到AOF缓冲区中,以确保数据的一致性。当子进程完成RDB文件的保存后,Redis会将AOF缓冲区中的数据写入到新的AOF文件中,这样就保证了数据的持久化。

  • RDB文件用于将Redis内存中的数据快照保存到磁盘上,以便在Redis服务器重启时能够恢复数据。它是Redis默认的持久化方式之一,通过将所有数据转换为二进制格式并以RDB文件的方式来存储。
  •  AOF缓冲区是一个位于用户空间的内存区域,用于暂时存储Redis服务器执行的写命令。这些写命令随后会被追加到AOF文件中,以便在Redis服务器重启时能够恢复数据。
  •  AOF文件用于记录Redis服务器接收到的所有写命令,这些命令以Redis协议的格式进行存储。当Redis服务器重启时,它会读取AOF文件,并按照其中记录的命令顺序重新执行,以恢复数据库的状态。因此,AOF文件能够确保数据的持久性和可靠性。

触发机制:RDB持久化可以手动触发,也可以自动触发。手动触发通过执行SAVE或BGSAVE命令来实现,其中SAVE命令会阻塞Redis主线程,直到RDB文件创建完毕,而BGSAVE命令则通过创建一个子进程来生成RDB文件,避免阻塞主线程。自动触发则是根据redis.conf配置文件中的规则来自动执行BGSAVE命令,例如“save 900 1”表示在900秒内如果有1个key发生变化,就会触发持久化。

优缺点:RDB持久化的优点是恢复数据的速度较快,因为RDB文件是二进制文件,直接读入内存恢复即可。缺点是可能会丢失最后一次持久化之后的数据,且在恢复大量数据时可能会导致Redis的启动时间较长。

二、AOF(Append Only File)持久

        AOF持久化是将Redis的操作命令追加到一个文件中,这个文件就是AOF文件。AOF文件是一个日志文件,记录了对Redis的操作命令,包括写操作和删除操作。

工作原理:AOF持久化是通过将Redis的每个写操作追加到AOF文件的末尾来实现的。当Redis需要重新加载数据时,只需要将AOF文件中的写操作重新执行一遍即可恢复数据。为了提高效率,Redis会将一些写操作进行合并,以减少文件的大小。当AOF文件变得太大时,Redis会自动进行重写,将AOF文件中的写操作进行压缩。

触发机制:AOF持久化也可以手动触发和自动触发。手动触发通过执行BGREWRITEAOF命令来实现,该命令会创建一个子进程来重写AOF文件。自动触发则是根据配置文件中的规则来自动执行BGREWRITEAOF命令,例如当AOF文件大小超过上一次重写后的一定百分比时。

BGREWRITEAOF是Redis中用于异步执行AOF(Append Only File)文件重写操作的命令

优缺点:AOF持久化的优点是可以保证数据的完整性和一致性,因为AOF文件记录了所有的写操作。缺点是相对于RDB持久化,恢复数据的速度较慢,因为需要重新执行AOF文件中的写操作。同时,AOF文件通常比RDB文件更大。

三、混合持久化(Redis 4.0新增)

        混合持久化结合了RDB的快速加载和AOF的数据安全性。在AOF重写时,会同时使用RDB和AOF两种格式。

工作原理:在AOF重写时,Redis先创建一个当前数据集的RDB快照,并将这个快照写入新的AOF文件的开头。然后,从快照创建开始,之后的写操作以AOF格式追加到文件末尾。这样,最终的AOF文件结构就是[RDB数据][AOF增量数据]。

优缺点:混合持久化的优点是重启时可以快速加载RDB部分来恢复大部分数据,然后执行AOF部分的命令来恢复最新的数据变更。这样既保证了数据的快速恢复,又提供了更好的数据安全性。缺点是AOF文件的大小可能会比单纯的AOF文件大一些,因为包含了RDB快照的数据。但是,由于RDB格式更紧凑,所以通常比单纯的AOF文件小。

四、持久化配置与优化

RDB持久化配置:在redis.conf配置文件中,可以通过修改save规则来配置RDB持久化的触发条件。例如,“save 900 1”表示在900秒内如果有1个key发生变化,就会触发持久化。同时,还可以配置是否开启RDB文件的压缩和校验等功能。

AOF持久化配置:在redis.conf配置文件中,可以通过修改appendonly参数来开启或关闭AOF持久化。同时,还可以配置AOF文件的同步策略(如appendfsync always、appendfsync everysec、appendfsync no)和重写触发条件等。

持久化优化:为了优化Redis的持久化性能,可以采取一些措施。例如,定期清理无用的key以减少数据集的大小;使用更高效的压缩算法来减小RDB文件的大小;合理配置AOF文件的同步策略和重写触发条件等。

        综上,Redis的持久化机制包括RDB持久化、AOF持久化和混合持久化三种方式。每种方式都有其优缺点和适用场景。在实际应用中,可以根据业务需求和系统性能要求来选择合适的持久化方式并进行相应的配置和优化。

相关文章:

[面试]关于Redis 的持久化你了解吗

Redis的持久化是指Redis服务器在关闭或重启时,将内存中的数据保存到磁盘上的一种机制。Redis支持多种持久化方式。 一、RDB(Redis Database)持久化 RDB持久化是Redis默认采用的持久化方式,它将Redis在某个时间点的数据保存到磁盘上…...

Systemd:tmpfiles

Systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles,可以创建、删除和管理临时文件的服务。 $ systemctl list-units --all | grep systemd-tmpfilessystemd-tmpfiles-clean.service load…...

【Flutter 内嵌 android 原生 View以及相互跳转】

Flutter 内嵌 android 原生 View以及相互跳转 一. 内嵌android 原生View二、android 与 flutter 相互跳转 一. 内嵌android 原生View 在android 工程的包名下,也可在MainActivity创建 android 原生view ,继承PlatformView // 1.自定义textview public st…...

python externally-managed-environment 外部管理环境

https://realpython.com/python-virtual-environments-a-primer/?refyaolong.net#why-do-you-need-virtual-environments 简而言之, pip 默认会将您安装的所有外部包放置在 Python 安装路径/site-packages/ 的文件夹中一些Linux 和 macOS操作系统 预装了内部的 P…...

前端 | MYTED单篇TED词汇学习功能优化

文章目录 📚实现效果🐇before🐇after 📚模块实现解析🐇html🐇css🐇javascript 📚实现效果 🐇before 点击TED单篇词汇表按钮,选择对应TED打卡号,…...

64 mysql 的 表锁

前言 我们这里来说的就是 我们在 mysql 这边常见的 几种锁 行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁, 表共享锁, 表排他锁 我们前面了解了行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁 等等相关 我们这里 来看一下 表共享锁, 表排他锁 的获取, 以及 和 其他表级…...

【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)

前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…...

ajax关于axios库的运用小案例

AJAX案例 图书管理 四大功能: 展示图书删除图书编辑图书信息新增图书 步骤 1.bootstrap弹窗来实现新增和编辑图书时出现的弹窗 有两种方案: a.可以用自带的属性来进行弹窗的显示和隐藏 b.可以通过JS进行控制,此操作可以进行自定义&am…...

微搭低代码入门01变量

目录 1 变量的定义2 变量的赋值3 变量的类型4 算术运算符5 字符串的连接6 模板字符串7 检查变量的类型8 解构赋值8.1 数组的解构赋值8.2 对象的解构赋值 9 类型转换9.1 转换为字符串9.2 转换为数字9.3 转换为布尔值 总结 好些零基础的同学,在使用低代码的时候&#…...

盘点2024年10款视频剪辑,哪款值得pick!!

在这个短视频盛行的时代,如何让我们的故事更生动有趣呢?那就要对短视频进行修饰了。这就需要借助视频剪辑工具:而一款好的工具不仅仅是视频的“美颜”,更是创意的灵魂所在!想象一下,运用一款功能齐全的剪辑…...

苹果手机照片批量删除:一键清理,释放空间

在数字化时代,iPhone不仅是我们沟通的桥梁,也是记录生活的重要工具。然而,随着时间的积累,手机中的照片数量不断增加,不仅占用大量存储空间,也让设备变得缓慢。苹果手机照片批量删除成为了一个普遍的需求。…...

《AI 大模型:重塑软件开发新生态》

《AI 大模型:重塑软件开发新生态》 一、AI 大模型引领软件开发新潮流二、AI 大模型在软件开发中的优势(一)提高开发效率(二)减少错误与提升质量(三)激发创新与拓展功能 三、AI 大模型在软件开发…...

uniapp(API-Promise 化)

一、异步的方法,如果不传入 success、fail、complete 等 callback 参数,将以 Promise 返回数据异步的方法,且有返回对象,如果希望获取返回对象,必须至少传入一项 success、fail、complete 等 callback 参数&#xff0c…...

【考研数学 - 数二题型】考研数学必吃榜(数二)

数学二 suhan, 2024.10 文章目录 数学二一、函数❗1.极限1.1求常见极限1.2求数列极限1.2.1 n项和数列极限1.2.2 n项连乘数列极限1.2.3 递推关系定义的数列极限 1.3确定极限式中的参数1.4无穷小量阶的比较 2.连续2.1判断是否连续,不连续则判断间断点类型2.2证明题 二…...

Redis生产问题(缓存穿透、击穿、雪崩)——针对实习面试

目录 Redis生产问题什么是缓存穿透?如何解决缓存穿透?什么是缓存击穿?如何解决缓存击穿?缓存穿透和缓存击穿有什么区别?什么是缓存雪崩?如何解决缓存雪崩? Redis生产问题 什么是缓存穿透&#x…...

android openGL中模板测试、深度测试功能的先后顺序

目录 一、顺序 二、模板测试 1、概念 2、工作原理 3、关键函数 三、深度测试 1、概念 2、工作原理 3、关键函数 三、模板测试和深度测试的先后顺序 一、顺序 在Android OpenGL中,模板测试(Stencil Testing)是在深度测试&#xff0…...

CCF PTA 编程培训师资认证2021年7月真题- C++兑换礼品

【题目描述】 小零和小壹是两个爱玩游戏的小孩,他俩平时最擅长的是解谜游戏,可今天 遇到了一个有点难的算法问题,希望能得到你的帮助。 他们面对的是一个电子装置,正面有 n 个排成一列的按钮,按钮上贴着编号 1~n 号的…...

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令,添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令,添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…...

【taro react】 ---- 常用自定义 React Hooks 的实现【六】之类渐入动画效果的轮播

1. 效果 2. 场景 css 效果实现:可以看到效果图中就是一个图片从小到大的切换动画效果,这个效果很简单,使用 css 的 transform 的 scale 来实现图片的从小到大的效果,切换就更加简单了,不管是 opacity 还是 visibility 都可以实现图片的隐藏和显示的切换。React.Children.m…...

基础算法练习--滑动窗口(已完结)

算法介绍 滑动窗口算法来自tcp协议的一种特性,它的高效使得其也变成了算法题的一种重要考点.滑动窗口的实现实际上也是通过两个指针前后遍历集合实现,但是因为它有固定的解题格式,我将其单独做成一个篇章. 滑动窗口的解题格式: 首先,定义两个指针left和right,与双指针不同的…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...