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

常见面试题-Redis持久化策略

谈谈Redis 的持久化策略?

参考文章:

  • Redis 持久化机制演进与百度智能云的实践

Redis的确是将数据存储在内存的,但是也会有相关的持久化机制将内存持久化备份到磁盘,以便于重启时数据能够重新恢复到内存中,避免数据丢失的风险。而Redis持久化机制有三种:AOFRDB混合型持久化(4.x版本后提供)

  • RDB持久化

    关闭 RDB 持久化只需要将 save 保存策略注释掉即可

    RDB持久化的方式有两种:

    • 手动触发(分为手动 save 和手动 bgsave)

      • 手动save:阻塞当前 Redis,直到持久化完成,可能造成长时间阻塞,线上不建议使用。​

      • 手动bgsave:Redis 进程执行 fork 创建子进程进行持久化,阻塞事件很短。在执行Redis-cli shutdown关闭Redis服务时或执行flushall命令时,如果没有开启AOF持久化,自动执行bgsave

    • 被动触发(以下四种情况会被动触发)

      • 达到了在 redis.conf 中配置被动触发的条件,会触发 bgsave 生成 rdb 文件

        Redis 中 save 操作的配置:从右向左条件主键变弱,如果60s发生了10000次写操作,就进行持久化,如果没有达到,在300s时,如果有100次写操作就会持久化,如果没有达到在3600s,如果有一次写操作就会持久化

        在这里插入图片描述

      • 主从复制时,从节点需要全量同步主节点的数据,会触发 bgsave

      • 执行 debug reload 命令重新加载 redis 时,会触发 bgsave

      • 执行 shutdown 命令时,如果没有开启 aof 持久化,会触发 bgsave

    bgsave子进程工作原理:

    由子进程继承父进程所有资源,且父进程不能拒绝子进程继承,bgsave子进程先将内存中的全量数据copy到磁盘的一个RDB临时文件,持久化完成后将该临时文件替换原来的dump.rdb文件。

    如果持久化过程中出现了新的写请求,则系统会将内存中发生数据修改的物理块copy出一个副本,bgsave 子进程会把这个副本数据写入 RDB 文件,在这个过程中,主线程仍然可以直接修改原来的数据,fork 使用了 写时复制技术(Copy-On-Write)

    操作系统中的写时复制技术:

    目的:是避免不必要的内存拷贝。

    在Linux系统中,调用 fork 系统调用创建子进程时,并不会把父进程所有占用的内存页复制一份,而是与父进程共用相同的内存页,而当子进程或者父进程对内存页进行修改时才会进行复制 —— 这就是著名的 写时复制 机制。

    那么bgsave中的写时复制技术即如果在持久化过程中,写入了新的数据,此时再去将元数据重新拷贝一份,进行修改。

    优点:

    • 使用单独子进程持久化,保证 redis 高性能。
    • RDB 持久化存储压缩的二进制文件,适用于备份、全量复制,可用于灾难备份,同时RDB文件的加载速度远超于AOF文件。

    缺点:

    • 没有实时持久化,可能造成数据丢失。
    • 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(需要的内存是原本的两倍)
    • RDB文件保存的二进制文件存在新老版本不兼容的问题。
  • AOF持久化

    默认AOF没有开启,可在redis.conf中配置

    在这里插入图片描述

    Redis7发生了重大变化,原来只有一个appendonly.aof文件,现在具有了三类多个文件:

    • 基本文件:RDB格式或AOF格式。存放RDB转为AOF当时内存的快照数据。该文件可以有多个。
    • 增量文件:以操作日志形式记录转为AOF后的写入操作。该文件可以有多个。
    • 清单文件:维护AOF文件的创建顺序,保证激活时的应用顺序。该文件只可以有1个。

    aof 文件中存储的 resp 协议数据格式,如果执行命令set a hello,aof文件内容如下:(*3代表有3条命令,$5代表有5个字符)

    *3
    $3
    set
    $1
    a
    $5
    hello
    

    AOF持久化时,其实是先写入缓存中,之后再同步到磁盘中,同步策略有三种:

    • appendfsync always:每次写入都同步到磁盘,最安全,但影响性能。
    • appendfsync everysec(推荐、默认配置):每秒同步一次,最多丢失1秒的数据。
    • appendfsync noRedis并不直接调用文件同步,而是交给操作系统来处理,操作系统可以根据buffer填充情况/通道空闲时间等择机触发同步;这是一种普通的文件操作方式。性能较好,在物理服务器故障时,数据丢失量会因OS配置有关。

    优点:

    • 数据丢失风险较低,后台线程处理持久化,不影响客户端请求处理的线程。

    缺点:

    • 文件体积由于保存的是所有命令会比RDB大上很多,而且数据恢复时也需要重新执行指令,在重启时恢复数据的时间往往会慢很多。

    AOF的重写(Rewrite)机制:

    • 为了防止AOF文件太大占用大量磁盘空间,降低性能,Redis引入了Rewrite机制对AOF文件进行压缩

      Rewrite就是对AOF文件进行重写整理。当开启Rewrite,主进程redis-server创建出一个子进程bgrewriteaof,由该子进程完成rewrite过程。

      首先会对现有aof文件进行重写,将计算结果写到一个临时文件,写入完毕后,再重命名为原aof文件,进行覆盖。

    配置AOF重写频率

    # auto‐aof‐rewrite‐min‐size 64mb //aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就很快,重写的意义不大
    # auto‐aof‐rewrite‐percentage 100 //aof文件自上一次重写后文件大小增长了100%则再次触发重写
    

    AOF的持久化流程图:

在这里插入图片描述

  • 混合持久化开启

    默认开启,即AOF持久化的基本文件时的基本文件是RDB格式的。(必须先开启aof)

    在这里插入图片描述

    混合持久化重写aof文件流程:aof 在重写时,不再将内存数据转为 resp 数据写入 aof 文件,而是将之前的内存数据做 RDB 快照处理,将 RDB快照+AOF增量数据 存在一起写入新的 AOF 文件,完成后覆盖原有的 AOF 文件。

    Redis重启加载数据流程:

    1. 先加载 RDB 数据到内存中
    2. 再重放增量 AOF 日志,加载 AOF 增量数据

    优点:

    • 结合了 RDB 和 AOF,既保证了重启 Redis 的性能,又降低数据丢失风险

    缺点:

    • AOF 文件中添加了 RDB 格式的内容,使得 AOF 文件的可读性变得很差;

相关文章:

常见面试题-Redis持久化策略

谈谈Redis 的持久化策略? 参考文章: Redis 持久化机制演进与百度智能云的实践 Redis的确是将数据存储在内存的,但是也会有相关的持久化机制将内存持久化备份到磁盘,以便于重启时数据能够重新恢复到内存中,避免数据丢…...

一文搞懂什么是 GNU/Linux 操作系统

Author:rab 目录 前言一、UNIX二、Linux三、GNU 前言 你是否经常看见或听说过这么一句话:这是一个类 Unix 的 GNU/Linux 操作系统,你是怎么理解这句话的呢?想要搞懂这句话的含义,你需要了解以下三点基本常识。 一、U…...

sql注入 [极客大挑战 2019]LoveSQL 1

打开题目 几次尝试,发现输1 1",页面都会回显NO,Wrong username password!!! 只有输入1,页面报错,说明是单引号的字符型注入 那我们万能密码试试能不能登录 1 or 11 # 成功登录 得到账号…...

验证码 | 可视化一键管控各场景下的风险数据

目录 查看今日验证数据 查看未来趋势数据 验证码作为人机交互界面经常出现的关键要素,是身份核验、防范风险、数据反爬的重要组成部分,广泛应用网站、App上,在注册、登录、交易、交互等各类场景中发挥着巨大作用,具有真人识别、身…...

问题解决:Ubuntu18.04下nvcc -V指令可用,/usr/local/下却没有cuda文件夹,原因分析及卸载方法

问题描述 今天要运行一个程序,需要CUDA版本高于10.0,我的电脑无法运行,于是开始检查 首先使用nvidia-smi与nvcc -V指令 能够看出来,当前显卡驱动适合的CUDA版本为12.1,而本机安装的版本是9.1.85,那么就需…...

uniapp+vue3使用pinia,安卓端报错白屏

报错内容: reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->at useStore2 (app-service.js:1487:15)at (app-service.js:1714:17)at (app-serv…...

OpenCV图像处理、计算机视觉实战应用

OpenCV图像处理、计算机视觉实战应用 专栏简介一、基于差异模型模板匹配缺陷检测二、基于NCC多角度多目标匹配三、基于zxing多二维码识别四、基于tesseract OCR字符识别 专栏简介 基于OpenCV C分享一些图像处理、计算机视觉实战项目。不定期持续更新,干货满满&…...

MySQL 事务的底层原理和 MVCC(一)

在事务的实现机制上,MySQL 采用的是 WAL(Write-ahead logging,预写式日志)机制来实现的。 在使用 WAL 的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含 redo 和 undo 两部分信息。 …...

vue3中使用全局自定义指令和组件自定义指令

这篇文章会教大家如何实现全局自定义指令和组件自定义指令 📓全局自定义指令和组件自定义指令的区别,除了写法不同和作用不同,其他的包括生命周期的使用方法都是一致的,全局自定义指令在main.ts中注册后整个项目都可以使用&#x…...

JVM 堆外内存详解

Java 进程内存占用除了JVM 运行时数据区,还有直接内存(Direct Memory)区域及 JVM 程序自身也会占用内存 直接内存(Direct Memory)区域:直接内存通过使用Native堆外内存来存储数据,这意味着数据…...

数据库的基本概念以及MySQL基本操作

一、数据库的基本概念 1、数据库的组成 数据:描述事物的符号记录 包括数字,文字、图形、图像、声音、档案记录等 以“记录”形式按统一格式进行存储 表:将不同的记录组织在一起,用来存储具体数据 数据库: 表的集合…...

【Docker】Docker安装Nginx配置静态资源

1.下载镜像 2.创建nginx配置文件 3.创建nginx容器运行 4.配置nginx静态资源 1.下载镜像 Dockerhub官网:Docker docker pull nginx docker pull nginx下载最新版本 默认latest 下载指定版本docker pull nginx:xxx 2.创建nginx配置文件 启动容器之前要创建nginx…...

【码神之路】【Golang】博客网站的搭建【学习笔记整理 持续更新...】

介绍 一个用原生GO开发的博客网站,涉及Golang Web开发、Web服务器搭建和HTTP请求处理、模板与静态资源处理等 技术栈 后端:Go、Go并发机制前端:HTML模版链接直达 Golang搭建博客网站的学习视频 注:这里我只记录我实质✅学习到…...

Win10 电源选项那选择“关闭显示器“为1分钟,1分钟后就锁屏了?怎么才能关闭显示器后不锁屏

环境: Win10专业版 问题描述: Win10 电源选项那选择"关闭显示器"为1分钟,1分钟后就锁屏了?怎么才能关闭显示器后不锁屏 解决方案: 方法一 更改注册表可以实现关闭显示器而不锁屏的效果。请按照以下步骤…...

虚拟机centos设置网络模式(桥接|NAT)

前言 桥接模式是通过物理网卡直接与外部网络建立联系的,而NAT模式则是通过虚拟网卡VMnet1或VMnet8通过宿主机共享IP与外部建立网络关系当需要将虚拟机资源共享给局域网用户使用时,宜采用桥接模式;当需要保护虚拟机资源,确保只能由…...

MySQL 8.2 Command Line Client打开时一闪而过闪退问题

MySQL8.2安装成功后,发现打开MySQL 8.0 Command Line Client时出现一闪而过,打不开的情况。 解决方案: 1、打开MySQL 8.2 Command Line Client文件位置 2、右键选择属性 3、复制它的目标 4、我复制下来的目标路径是这样的,"…...

【NI-RIO入门】CompactRIO介绍及环境安装

CompactRIO是什么? CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具,使其成为工业物联网、监测和控制应用的理想之选。实时处理器提供可靠,可预测的行为,而FPGA在需要高速逻辑和精确定时的较小任务上表现出色…...

生产问题 Recv-Q101

生产上服务端口 Recv-Q101 新请求到服务器的失败,幸好及时发现,通过重启服务之后得到解决,具体原因等待排查 目前觉得的原因是:某些请求暂用时间比较久...

从零开始:Rust环境搭建指南

大家好!我是lincyang。 今天,我们将一起探讨如何从零开始搭建Rust开发环境。 Rust环境搭建概览 Rust是一种系统编程语言,以其安全性、并发性和性能闻名。搭建Rust环境是学习和使用这一语言的第一步。 第一步:安装Rust Rust的…...

Tensorrt 实现 yolov5-cls 遇到的问题

yolov5-6.2增加了分类训练、验证、预测和导出(所有 11 种格式),还提供了 ImageNet 预训练的 YOLOv5m-cls、ResNet(18、34、50、101) 和 EfficientNet (b0-b3) 模型. 官方Git : https://github.com/ultralytics/yolov5 分类模型与…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

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

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

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...