【黑马redis高级篇】持久化

//来源[01,05]分布式缓存
除了黑马,还参考了别的。

目录

  • 1.单点redis问题及解决方案
  • 2.为什么需要持久化?
  • 3.Redis持久化有哪些方式呢?为什么我们需要重点学RDB和AOF?
  • 4.RDB
    • 4.1 定义
    • 4.2 触发方式
      • 4.2.1手动触发save
      • 4.2.2被动触发bgsave
        • 配置
        • bgsave的流程
        • 什么时候会执行bgsave?
        • 在快照时服务崩溃怎么办?
    • 4.3 rdb的缺点
    • 4.4 rdb的优点
  • 5.AOF持久化
    • 5.1定义
    • 5.2 配置
    • 5.3 为了解决AOF文件体积膨胀的问题,Redis提供AOF文件重写机制
  • 6.RDB和AOF对比
  • 7.RDB和AOF混合方式
  • 8.两者都有时,如何从持久化中恢复数据?

1.单点redis问题及解决方案

数据丢失问题:实现redis数据持久化
并发能力问题:搭建主从集群,实现读写分离
故障恢复问题:利用Redis哨兵,实现健康检测和自动恢复
存储能力问题:搭建分片集群,利用插槽机制进行动态扩容

2.为什么需要持久化?

Redis是个基于内存的数据库。服务一旦宕机,内存中的数据将全部丢失。
通常的解决方案是从后端数据库恢复这些数据,但后端数据库有性能瓶颈,如果是大数据量的恢复,1、会对数据库带来巨大的压力,2、数据库的性能不如Redis。导致程序响应慢。
所以对Redis来说,实现数据的持久化,避免从后端数据库中恢复数据,是至关重要的。

3.Redis持久化有哪些方式呢?为什么我们需要重点学RDB和AOF?

从严格意义上说,Redis服务提供四种持久化存储方案:RDB、AOF、虚拟内存(VM)和 DISK STORE。但目前官方明确支持的只有前两种方案。

4.RDB

4.1 定义

RDB:redis数据备份文件,redis数据快照。
把内存中的所有数据都记录到磁盘中,当redis实例故障重启后,从磁盘中读取快照文件,恢复数据。
快照文件称为RDB文件,默认是保存在当前运行目录。再次启动时自动读取rdb文件。

4.2 触发方式

4.2.1手动触发save

save命令:由redis主进程执行rdb,会阻塞所有进程。
默认是服务停止时才会执行。

4.2.2被动触发bgsave

开启子进程后台执行rdb,避免影响主进程。

配置

在redis.conf配置文件中写:save x y (在x秒内,如果至少有y个key被修改,则执行bgsave);
如果是save ”"则表示禁用rdb。
在这里插入图片描述
配置文件中也可以配置rdb的其他配置。

bgsave的流程

bgsave开始时,fork主进程得到子进程,子进程共享主进程的内存,完成fork后读取内存数据并写入rdb文件(替换旧的rdb)。
共享:子进程拷贝主进程的页表,子进程操作自己的虚拟内存时,映射到跟主进程相同的物理内存区域。只有fork时,需要对主进程阻塞(拷贝虚拟页表)。在这里插入图片描述

在这里插入图片描述
如果子进程读取数据时,主进程在修改数据怎么办?
fork采用的是copy-on-write技术。主进程要写一块数据时,拷贝一份原数据的副本,子进程读取副本数据,同时主进程可以在原来的数据上写。
极端情况下,所有数据都要修改,都有拷贝,占用极大的内存。
在这里插入图片描述

什么时候会执行bgsave?
在快照时服务崩溃怎么办?

在快照操作过程中不能影响上一次的备份数据。Redis服务会在磁盘上创建一个临时文件进行数据操作,待操作成功后才会用这个临时文件替换掉上一次的备份。

4.3 rdb的缺点

RDB方式实时性不够,无法做到秒级的持久化(只能恢复快照之前的数据);
每次调用bgsave都需要fork子进程,fork子进程属于重量级操作,频繁执行成本较高;

4.4 rdb的优点

快照使用的算法大大压缩了文件大小,用于备份、全量复制等场景;
Redis加载RDB文件恢复数据要远远快于AOF方式;

5.AOF持久化

5.1定义

Append only file(追加文件)。Redis处理的每一个写命令都会追加在aof文件,可以看作是命令的日志文件。恢复时读取aof的命令并执行。

5.2 配置

在配置文件中开启
在这里插入图片描述
先写到缓冲区,缓冲区在内存中,到时候再写到磁盘中。

5.3 为了解决AOF文件体积膨胀的问题,Redis提供AOF文件重写机制

因为记录命令,所以aof文件比rdb大很多。
执行bg rewrite aof,消除冗余命令,用最少的命令完成一样的效果。比如对同一个key的多次写,只有最后一次写是有意义的。

执行过程:AOF重写过程是由后台子进程完成的。主线程fork出后台的bgrewriteaof子进程,bgrewriteaof子进程拷贝一份主进程的内存,这里包含了最新数据。然后,bgrewriteaof子进程就可以在不影响主线程的情况下,逐一把拷贝的数据写成操作,记入重写日志。
在这里插入图片描述

6.RDB和AOF对比

在这里插入图片描述

总结:rdb文件体积小,启动快,数据不完整,占用资源多。

7.RDB和AOF混合方式

Redis 4.0 中提出了一个混合使用 AOF 日志和内存快照的方法。
简单来说,内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。
在这里插入图片描述

8.两者都有时,如何从持久化中恢复数据?

优先加载aof。因为AOF保存的数据更完整。在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件IO(Linux文件IO,目录操作函数)

前言 本文介绍Linux系统下自带的文件IO的函数。 Linux文件IO相关函数 open函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode)…

2024ideaUI切换和svn与git的切换

2024的UI实在很不舒服&#xff0c;隐藏了很多按键&#xff1b; 第一步&#xff1a; 视图 -》 外观 -》 工具栏选出来&#xff1b; 结果出来&#xff1a; 运行的按键和设置的按钮 第二步 点击设置的按钮&#xff0c;选择最后一个&#xff0c;重启就行 结果 舒服&#xff01; s…

双通道音频功率放大电路D2822M兼容TDA2822,全封装输出功率0.11W,用于音频产品

在某客户的便携式音频产品中&#xff0c;客户想在确保其产品的性能的前提下&#xff0c;为产品方案寻找一颗国产备份料。客户产品之前使用的是TDA2822&#xff0c;在了解客户的电路设计以及该产品的电气特性后&#xff0c;给客户寻找了一款可兼容相同电路设计使用的国产厂牌芯谷…

2010年国赛高教杯数学建模C题输油管的布置解题全过程文档及程序

2010年国赛高教杯数学建模 C题 输油管的布置 某油田计划在铁路线一侧建造两家炼油厂&#xff0c;同时在铁路线上增建一个车站&#xff0c;用来运送成品油。由于这种模式具有一定的普遍性&#xff0c;油田设计院希望建立管线建设费用最省的一般数学模型与方法。   1. 针对两炼…

Python零基础01——Python的由来,Python的特点、优缺点有哪些?

文章目录 Python的由来Python的特点Python的优缺点什么是编译器 Python的由来 1989年圣诞节期间&#xff0c;在阿姆斯特丹为打发圣诞节的无趣&#xff0c;决定开发一款新的脚本解释语言&#xff0c;作为ABC语言的一种继承&#xff0c;然后他就这么做了&#xff0c;并实现了&am…

Python中的help()函数:追踪错误并提供解决方案

引言 在Python编程中&#xff0c;help()函数是一个非常有用的内置工具&#xff0c;它能够提供关于模块、关键字、属性和方法等的详细信息。对于初学者来说&#xff0c;help()函数可以帮助他们理解代码的工作原理&#xff0c;快速查找文档&#xff0c;以及解决编程过程中遇到的…

<Linux> 线程安全

目录 文章目录 一、Linux线程互斥 1. 进程线程间的互斥相关背景概念 2. 互斥量mutex 3. 互斥量接口 初始化互斥量 动静态分配 销毁互斥量 互斥量加锁 互斥量解锁 4. 互斥量实现原理 5. 简单封装互斥量 二、可重入与线程安全 1. 概念 1.1 可重入 1.2 线程安全 2. 常见的线程不…

LLama 3.2 1B 和 3B:体型虽小,但威力强大!

MetaAI 刚刚推出了 Llama-3.2&#xff0c;这是一套新的模型&#xff0c;其中包括两个令人印象深刻的轻量级大型语言模型 (LLM)&#xff0c;分别具有 10 亿 (1B) 和 30 亿 (3B) 个参数&#xff0c;以及更大的视觉语言模型 (VLM)&#xff0c;分别具有 11B 和 90B 个参数。 取决于…

IT监控平台可视化:多维度展示助力运维效率提升

在信息化时代&#xff0c;IT设备的稳定性与业务的连续性紧密相连&#xff0c;任何细微的故障都可能给企业带来巨大的损失。因此&#xff0c;IT运维团队面临着前所未有的挑战&#xff0c;他们需要迅速、准确地识别和解决问题&#xff0c;以确保业务的平稳运行。而IT监控平台的可…

Django学习- ORM基础操作_创建数据

ORM操作&#xff1a; 管理器对象&#xff1a; 创建数据&#xff1a; Django shell 想要操作模型对象&#xff0c;首先我们需要把它引进Django shell中 >>> from bookstore.models import Book >>> b1 Book.objects.create(titleAI, pub清华大学出版社, pr…

Java | Leetcode Java题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; class Solution {Random random;double xc, yc, r;public Solution(double radius, double x_center, double y_center) {random new Random();xc x_center;yc y_center;r radius;}public double[] randPoint() {double u random.next…

基于机器学习与深度学习的贷款批准预测

1.项目背景 该数据集源自Kaggle的“Playground Series - Season 4, Episode 10”竞赛&#xff0c;是通过在贷款批准预测数据集上训练的深度学习模型生成的数据&#xff0c;旨在使用借款人信息预测贷款批准结果&#xff0c;它通过模拟真实贷款审批场景&#xff0c;帮助金融机构…

【Linux系统编程】环境基础开发工具使用

目录 1、Linux软件包管理器yum 1.1 什么是软件包 1.2 安装软件 1.3 查看软件包 1.4 卸载软件 2、Linux编辑器-vim 2.1 vim的概念 2.2 vim的基本操作 2.3 vim的配置 3、Linux编译器-gcc/g 3.1 gcc编译的过程​编辑​编辑​编辑 3.2 详解链接 动态链接 静态链接 4…

深度解析LMS(Least Mean Squares)算法

目录 一、引言二、LMS算法简介三、LMS算法的工作原理四、LMS算法的特点五、LMS算法的应用场景六、LMS算法的局限性七、总结八、进一步探讨 一、引言 自适应滤波器是一种动态调整其参数以适应变化环境的信号处理工具&#xff0c;广泛应用于噪声消除、信道均衡和系统识别等领域。…

Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库

AxureRP电商商城PCapp后台买家卖端高保真原型模板本套包含三份原型图素材 APP买家端原型简介&#xff1a; 包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 本模板由…

Rancher—多集群Kubernetes管理平台

目录 一、Rancher 简介1.1 Rancher 和 k8s 的区别 二、Rancher 安装及配置2.1 安装 rancher2.2 登录 Rancher 平台2.3 Rancher 管理已存在的 k8s 集群2.4 创建名称空间 namespace2.5 创建 Deployment 资源2.6 创建 service2.7 Rancher 部署监控系统 一、Rancher 简介 Rancher …

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo:推进交互式与知识丰富的驾驶世界模型

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo&#xff1a;推进交互式与知识丰富的驾驶世界模型 Abstract 驾驶世界模型因其对复杂物理动态的建模能力而受到越来越多的关注。然而&#xff0c;由于现有驾驶数据集中的视频多样性有限&#xff0c;其卓越的建…

uniapp学习(004-2 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

我对软件工程的理解

1 引言 从事软件行业这么年&#xff0c;写了10年代码&#xff0c;又从事了多年的项目产品方面的工作&#xff0c;一些每天用到的软件工程的方法&#xff0c;虽然天天都在用但一些概念总感觉似是而非&#xff0c;正好借假期的时间&#xff0c;好好整理下&#xff0c;以供自己或…

【你也能从零基础学会网站开发】浅谈一下SQL Server 2000中的NULL值到底有什么用处

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 NULL 是什么 …