[面试]关于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 参数,…...
【考研数学 - 数二题型】考研数学必吃榜(数二)
数学二 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)是在深度测试࿰…...
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,与双指针不同的…...
Pixel Language Portal保姆级教程:Hunyuan-MT-7B模型蒸馏轻量化(TinyMT)与移动端适配路径
Pixel Language Portal保姆级教程:Hunyuan-MT-7B模型蒸馏轻量化(TinyMT)与移动端适配路径 1. 项目背景与核心价值 Pixel Language Portal(像素语言跨维传送门)是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。…...
Python 如何反向 `enumerate` 遍历枚举
在 Python 中,enumerate() 是一个常用的内置函数,用于在遍历可迭代对象(如列表、元组、字符串等)时同时获取索引和值。但默认情况下,enumerate() 是从前往后遍历的。那么,**如何反向 enumerate 遍历&#x…...
如何高效保存B站视频?全功能跨平台工具BiliTools使用指南
如何高效保存B站视频?全功能跨平台工具BiliTools使用指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...
如何一键搞定Switch游戏安装:Awoo Installer全面指南
如何一键搞定Switch游戏安装:Awoo Installer全面指南 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装的繁琐流程而…...
墨语灵犀对比传统方法:自动化作业批改效果实测
墨语灵犀对比传统方法:自动化作业批改效果实测 作为一名在教育技术领域摸爬滚打了多年的从业者,我见过太多关于“AI批改作业”的讨论。从最初的简单关键词匹配,到后来的规则引擎,每次技术迭代都让人充满期待,但实际落…...
解锁知识:9种突破信息壁垒的创新方案
解锁知识:9种突破信息壁垒的创新方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,高效的"信息获取"与"资源解锁"…...
从入门到精通解析Python Selenium如何模拟浏览器操作
Selenium是一款开源的自动化测试工具,核心优势在于能模拟真实用户操作浏览器(如点击、输入、滚动),并渲染动态加载的网页内容(解决Requests库无法爬取JS动态数据的问题)。 一、Selenium入门准备:…...
HALCON实战:从一维码到复杂OCR,图像增强与运算的工业视觉全流程解析
1. 工业视觉检测的挑战与HALCON解决方案 在自动化产线上,产品表面的一维码、二维码和字符识别是质量控制的关键环节。我曾在某电子元件生产线遇到这样的场景:传送带以每秒3米的速度移动,产品表面既有激光刻印的微小点阵字符,又有喷…...
车企携手Tech Soft 3D:基于 HOOPS 工具集打造Web端一体化工程可视化解决方案
随着汽车行业向智能化、电动化转型,整车研发体系正在发生深刻变化。围绕多平台架构、跨区域协同以及供应链一体化,企业对于工程数据的使用方式提出了更高要求——不仅要“能管理”,更要“能流动、能协同”。 为推动核心工程系统向浏览器化、…...
Linux 内核遍历宏介绍
Linux内核中的遍历宏全面详解 Linux内核中大量使用遍历宏(Iteration Macros)来简化数据结构的遍历操作。这些宏提供了类型安全、简洁且高效的遍历方式,是内核编程的核心范式之一。一、遍历宏的分类 1.1 按功能分类 Linux内核遍历宏 ├── 链…...
