Redis学习打卡-Day5-Redis 持久化

单点 Redis 的一些问题
  • 数据丢失:Redis 是内存存储,服务重启可能会丢失数据。solution:实现 Redis 数据持久化
  • 并发能力:单节点 Redis 并发能力虽然不错,但也无法满足如618这样的高并发场景。solution:搭建主从集群,实现读写分离。
  • 故障恢复:如果 Redis 宕机,则服务不可用,需要一种自动的故障恢复手段。solution:哨兵机制,实现健康检测及自动恢复。
  • 存储能力:Redis 基于内存,单节点能存储的数据量难以满足海量数据需求。solution:搭建分片集群,利用插槽机制实现动态扩容。

Redis 持久化

  • 使用缓存的时候,我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中。大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了做数据同步(比如 Redis 集群的主从节点通过 RDB 文件同步数据)。
  • Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持 3 种持久化方式:快照(snapshotting,RDB、只追加文件(append-only file, AOF)、以及RDB 和 AOF 的混合持久化(Redis 4.0 新增)。

1.RDB

  • RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。
  • 简单来说就是把内存中某个时间点的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB 文件,默认是保存在当前运行目录。
执行 RDB
  • 谁来执行?
    • save 命令:由 Redis 主进程来执行 RDB,会阻塞所有命令。
    • bgsave 命令:开启子进程执行 RDB,避免主进程受到影响。默认选项。
      • bgsave 开始时会 fork 主进程得到子进程,子进程共享主进程的内存数据。完成 fork 后读取内存数据并写入新的 RDB 文件替换旧的。
      • fork 采用的是 copy-on-write 技术:当主进程执行读操作时,访问共享内存;当主进程执行写操作时,则会拷贝一份数据,执行写操作。 bgsave
  • 何时执行?
    • Redis 停机时会自动执行一次 RDB。
    • Redis 内部有触发 RDB 的机制,可以在 redis.conf 文件中找到,如:save 900 1 表示900秒内,如果至少有1个 key 被修改,则执行bgsave
    • save "" 则表示禁用 RDB。
RDB 缺点
  • RDB 执行间隔时间长,两次 RDB 之间去写入数据有丢失的风险。
  • fork 子进程、压缩、写出 RDB 文件都比较耗时。

2.AOF

  • AOF 全称 Append Only File(追加文件)。Redis 处理的每一个写命令,都会将该命令写入到 AOF 缓冲区中,然后再写入AOF 文件,可以看做是命令日志文件。
执行 AOF
  • 执行流程?

    • 命令追加(append):所有的写命令会追加到 AOF 缓冲区中。
    • 文件写入(write):将 AOF 缓冲区的数据写入到 AOF 文件中。这一步需要调用write函数(系统调用),write将数据写入到了系统内核缓冲区之后直接返回了(延迟写)。注意!!!此时并没有同步到磁盘。
    • 文件同步(fsync):AOF 缓冲区根据对应的持久化方式( fsync 策略)向硬盘做同步操作。这一步需要调用 fsync 函数(系统调用), fsync 针对单个文件操作,对其进行强制硬盘同步,fsync 将阻塞直到写入磁盘完成后返回,保证了数据持久化。
    • 文件重写(rewrite):随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。
    • 重启加载(load):当 Redis 重启时,可以加载 AOF 文件进行数据恢复。
      AOF执行流程
  • 谁来执行?

    • AOF 默认是关闭的。需要修改 redis.conf 配置文件来开启 AOF。 AOF 默认
  • 何时执行?

    • AOF 的命令记录频率也可以通过 redis.conf 文件来配置。默认每隔一秒记录一次。
      命令记录频率
      命令记录频率参数
AOF 自动重写功能
  • AOF 重写(rewrite) 是一个有歧义的名字,该功能是通过读取数据库中的键值对来实现的,程序无须对现有 AOF 文件进行任何读入、分析或者写入操作。
  • 因为记录的是命令,AOF 文件会比 RDB 文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行 bgrewriteaof 命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。
  • AOF 文件重写期间,Redis 还会维护一个 AOF 重写缓冲区,该缓冲区会在子进程创建新 AOF 文件期间,记录服务器执行的所有写命令。当子进程完成创建新 AOF 文件的工作之后,服务器会将重写缓冲区中的所有内容追加到新 AOF 文件的末尾,使得新的 AOF 文件保存的数据库状态与现有的数据库状态一致。最后,服务器用新的 AOF 文件替换旧的 AOF 文件,以此来完成 AOF 文件重写操作。
  • Redis 也会在触发阈值时自动去重写 AOF 文件。值也可以在redis.conf中配置。
    在这里插入图片描述
AOF 为什么是在执行完命令之后记录日志?
  • 避免额外的检查开销,AOF 记录日志不会对命令进行语法检查;
  • 在命令执行完之后再记录,不会阻塞当前的命令执行。
  • 这样也带来了风险:
    • 如果刚执行完命令 Redis 就宕机会导致对应的修改丢失;
    • 可能会阻塞后续其他命令的执行(AOF 记录日志是在 Redis 主线程中进行的)。
AOF 校验机制
  • 纯 AOF 模式下,Redis 通过逐条解析文件中的命令来验证文件的有效性。
  • 在 混合持久化模式(Redis 4.0 引入)下,AOF 文件由两部分组成:
    • RDB 快照部分:文件以固定的 REDIS 字符开头,存储某一时刻的内存数据快照,并在快照数据末尾附带一个 CRC64 校验和(位于 RDB 数据块尾部、AOF 增量部分之前)。
    • AOF 增量部分:紧随 RDB 快照部分之后,记录 RDB 快照生成后的增量写命令。这部分增量命令以 Redis 协议格式逐条记录,无整体或全局校验和。
  • Redis 启动并加载 AOF 文件时,首先会校验文件开头 RDB 快照部分的数据完整性,即计算该部分数据的 CRC64 校验和,并与紧随 RDB 数据之后、AOF 增量部分之前存储的 CRC64 校验和值进行比较。如果 CRC64 校验和不匹配,Redis 将拒绝启动并报告错误。
  • RDB 部分校验通过后,Redis 随后逐条解析 AOF 部分的增量命令。如果解析过程中出现错误(如不完整的命令或格式错误),Redis 会停止继续加载后续命令,并报告错误,但此时 Redis 已经成功加载了 RDB 快照部分的数据

RDB 与 AOF

  • RDB 和 AOF 各有自己的优缺点。
     RDB 与 AOF
  • 如何选择?
    • 如果 Redis 保存的数据丢失一些也没什么影响的话,可以选择使用 RDB。
    • 不建议单独使用 AOF,因为时不时地创建一个 RDB 快照可以进行数据库备份、更快的重启以及解决 AOF 引擎错误。
    • 如果数据要求的安全性比较高的话,建议同时开启 RDB 和 AOF 持久化或者开启 RDB 和 AOF 混合持久化。

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

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

相关文章

飞书知识问答深度体验:企业AI应用落地的典范产品

飞书知识问答深度体验:企业AI应用落地的典范产品 产品介绍-飞书知识问答是什么与常规通用大模型相比有何优点?大模型横行的时代,飞书知识问答对普通人和企业有何影响呢? 场景示例-不同角色可以用飞书知识问答做什么?对…

Python打卡训练营学习记录Day34

知识点回归: CPU性能的查看:看架构代际、核心数、线程数 GPU性能的查看:看显存、看级别、看架构代际 GPU训练的方法:数据和模型移动到GPU device上 类的call方法:为什么定义前向传播时可以直接写作self.fc1(x) CPU性…

Django的请求和响应+template模板

🌟 如果这篇文章触动了你的心弦,请不要吝啬你的支持! 亲爱的读者, 感谢你花时间阅读这篇分享。希望这里的每一个字都能为你带来启发或是让你会心一笑。如果你觉得这篇文章有价值,或者它解决了你一直以来的一个疑问&a…

Python |GIF 解析与构建(2):状态机解析

Python |GIF 解析与构建(2):状态机解析 目录 Python |GIF 解析与构建(2):状态机解析 引言 一、状态机概述 状态机的优势与改进方向 总结 引言 在《Python |GIF 解…

PCB设计实践(二十六)贴片电容与插件电容的全面解析:差异、演进与应用场景

一、核心差异:结构与性能对比 物理结构与封装形式 贴片电容(Surface Mount Device, SMD)采用扁平化设计,外形多为长方体或圆柱体,直接通过焊盘固定在电路板表面。其封装材料通常为陶瓷、聚合物或铝电解层,外…

XC7A200T-2FFG1156I FPGA AMD Xilinx Artix-7

XC7A200T-2FFG1156I 是 AMD Xilinx Artix-7 系列的一款高性能低功耗 FPGA,采用 28 nm 高性能低功耗(HPL)工艺制造,核心电压在 0.95 V–1.05 V 之间,可在 –40 C 至 100 C 工业温度范围内稳定工作 。 逻辑资源&#xff…

LVS + Keepalived + Nginx 高可用负载均衡系统实验

1. 项目背景 在现代 Web 应用中,高可用性和负载均衡是至关重要的需求。本项目旨在通过 LVS(Linux Virtual Server)实现流量分发,通过 Keepalived 实现高可用性,通过 Nginx 提供后端服务。该架构能够确保在单点故障的情…

window 显示驱动开发-视频内存供应和回收(一)

Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本用户模式显示驱动程序必须使用内存套餐和回收功能(从Windows 8开始提供),以减少本地内存和系统内存中临时表面所需的内存开销。 最低 WDDM 版本:1.2 最低 Windows 版本&#xff…

什么是VR场景?VR与3D漫游到底有什么区别

在数字化时代,虚拟现实(Virtual Reality, 简称VR)场景与3D漫游作为两种前沿技术,改变着人们的生活方式和体验模式。通过计算机模拟真实或假想的场景,让用户仿佛身临其境,并能与虚拟环境进行互动。尽管VR场景…

JAVA查漏补缺(2)

AJAX 什么是Ajax Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信方式 异步的JavaScript 它可以异步地向服务器发送请求,在等待响应的过程中&…

客服中心大模型应用演进路线:从传统服务到超级智能助手的转型

客服中心作为企业与客户沟通的重要桥梁,近年来经历了从人工服务到人工智能驱动的深刻变革。本文基于"客服中心大模型应用演进路线图",详细解析客服中心从传统模式向AI驱动智能服务的转型历程,剖析每个发展阶段的特点、应用场景及关…

使用 OpenCV 实现“随机镜面墙”——多镜片密铺的哈哈镜效果

1. 引言 “哈哈镜”是一种典型的图像变形效果,通过局部镜面反射产生扭曲的视觉趣味。在计算机视觉和图像处理领域,这类效果不仅有趣,还能用于艺术创作、交互装置、视觉特效等场景。 传统的“哈哈镜”往往是针对整张图像做某种镜像或扭曲变换…

Python训练营打卡——DAY33(2025.5.22)

目录 简单的神经网络 一、PyTorch的安装 二、准备工作 三、数据的准备 四、模型架构定义 五、模型训练(CPU版本) 1. 定义损失函数和优化器 2. 开始循环训练 3. 可视化结果 六、通俗解释 1. 环境安装(相当于买锅碗瓢盆)…

目标检测 Lite-DETR(2023)详细解读

文章目录 迭代高级特征跨尺度融合高效的低层次特征跨尺度融合KDA:Key-aware Deformable Attention 论文翻译: CVPR 2023 | Lite DETR:计算量减少60%!高效交错多尺度编码器-CSDN博客 DINO团队的 (Lightweight Transfo…

ES(Elasticsearch) 基本概念(一)

Elasticsearch作为当前最流行的开源搜索和分析引擎,广泛应用于日志分析、全文搜索、业务智能等领域。Elasticsearch是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产级工作负载的速度和相关性进行了优化。使用 Elasti…

当物联网“芯”闯入纳米世界:ESP32-S3驱动的原子力显微镜能走多远?

上次咱们把OV2640摄像头“盘”得明明白白,是不是感觉ESP32-S3这小东西潜力无限?今天,咱们玩个更刺激的,一个听起来就让人肾上腺素飙升的挑战——尝试用ESP32-S3这颗“智慧芯”,去捅一捅科学界的“马蜂窝”,…

Excel合并单元格后,如何自动批量生成序号列

1.选择整列 2.组合键:CtrlG 3.定位条件,选择“空值” 4.在第一个框中输入“MAX(”,鼠标选中A1框,后加“:”,鼠标选中前方“A1”,按“F4”绝对引用,补全右括号,后输入“1…

TDengine 运维—容量规划

概述 若计划使用 TDengine 搭建一个时序数据平台,须提前对计算资源、存储资源和网络资源进行详细规划,以确保满足业务场景的需求。通常 TDengine 会运行多个进程,包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在这些进程…

Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享

乡村治理正从传统模式向“数据驱动”转型。数字乡村可视化大屏作为数据展示的核心载体,不仅能直观呈现乡村发展全貌,还能为决策提供科学依据。本文以Axure为工具,结合实际案例,分享如何从零设计一个功能完备、交互流畅的数字乡村大…

从零基础到最佳实践:Vue.js 系列(1/10):《环境搭建与基础概念》

Vue.js 环境搭建与基础概念 关键点 Vue.js 是一个简单易用的前端框架,适合初学者快速上手。搭建开发环境需要安装 Node.js 和 npm/Yarn,推荐使用最新 LTS 版本。Vue CLI 是官方工具,可快速创建项目并提供开发服务器。Vue.js 基于 MVVM 模式&…