【黑马redis高级篇】持久化

news2024/12/23 12:59:55

//来源[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保存的数据更完整。在这里插入图片描述

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

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

相关文章

软件工程:需求规格说明书(图书管理系统)

目录 1 导言 1.1 编写目的 1.2 参考资料 2 项目介绍 2.1 项目背景 2.2 项目目标 3 应用环境 3.1 系统运行网络环境 ​编辑 3.2 系统软硬件环境 4 功能模型 4.1 功能角色分析 4.1.1 图书管理员 4.1.2 普通读者 4.1.3 邮件系统 4.2 功能性需求 4.2.1 预定图…

AI+Xmind彻底解决你的思维导图

在写作领域、老师授课、产品经理等都会使用到思维导图,如果是一个个拖拉撰写太麻烦了。 本篇内容小索奇就教会大家利用AI结合Xmind制作思维导图。 先打开我们的AI软件 这里小索奇用ChatGPT(可以使用kimi,豆包等大模型都可以) P…

中小型医院网站开发:Spring Boot入门

2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,…

上市公司资产误定价Misp计算数据-含参考资料及代码(2006-2023年)

数据说明:参考《经济研究》期刊游家兴(2012)老师的做法,先根据行业内所有公司推算出公司的基础价值,进而通过对公司的实际价值与基础价值进行对比, 来衡量公司相对于业内同行的误定价水平,具体大…

D39【python 接口自动化学习】- python基础之函数

day39 函数的返回值 学习日期:20241016 学习目标:函数﹣-52 函数的返回值:如何得到函数的执行结果? 学习笔记: return语句 返回值类型 def foo():return abc var foo() print(var) #abc# 函数中return函…

python实现录屏功能

python实现录屏功能 将生成的avi文件转为mp4格式后删掉avi文件 参考感谢:https://www.cnblogs.com/peachh/p/16549254.html import os import cv2 import time import threading import numpy as np from PIL import ImageGrab from pynput import keyboard from da…

统一认证与单点登录:简化用户体验的关键解决方案

引言 在数字化时代,企业往往需要管理多个应用和系统,随之而来的是用户密码和身份认证管理的复杂性。统一认证(Single Sign-On, SSO)作为一种身份管理解决方案,不仅可以减少用户在多个系统间切换登录的麻烦&#xff0c…

选择合适的SSL证书

随着我们在线业务的增长,确保网站安全变得越来越重要。对于许多人来说,保护网站安全的想法似乎令人望而生畏,尤其是在有各种SSL证书可用的情况下。您可能想知道哪一个最适合您的业务需求或如何浏览这些选项。 除了SSL证书之外,使…

Nuxt.js 应用中的 app:resolve 事件钩子详解

title: Nuxt.js 应用中的 app:resolve 事件钩子详解 date: 2024/10/17 updated: 2024/10/17 author: cmdragon excerpt: app:resolve 是 Nuxt.js 中的生命周期钩子,在解析 app 实例后调用。这个钩子允许开发者在应用完全初始化后执行一些自定义操作,比如注册插件、设置中…

D40【python 接口自动化学习】- python基础之函数

day40 练习:函数实现电商购物车功能 学习日期:20241017 学习目标:函数 - 53 如何利用函数实现电商购物车功能? 学习笔记: 购物车功能分析 定义商品为列表 实现商品的展示 # 商品 products[[1000,iphone,phone,1200…

(MySQL)索引

注:此博文为本人学习过程中的笔记 1.简介 1.1.概念 MySQL的索引是一种数据结构,它可以帮助数据库高效地查询,更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快查询 MySQ…

NOIP2023(惨烈)做题记(泪奔::>_<::)

P9868 [NOIP2023] 词典 1.这道题倒是做出来了,大概思路如下: 对于每一个字符串,可以存储一个 k 和 k2​ 分别表示这个字符串包含的字符中的字典序最小字符与字典序最大字符,这一步可以初始就处理好。 然后判断每一个字符串是否…

Windows模拟电脑假死之键盘鼠标无响应

Windows模拟电脑假死之键盘鼠标无响应 1. 场景需求 模拟Windows电脑假死,失去键盘鼠标响应。 2. 解决方案 采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。 3. 示例程序 【1】. 创建MFC对话框项目 新建一个MFC应用程序项目,项目名称…

3.3 Thymeleaf语法

文章目录 引言Thymeleaf标签显示标签链接地址标签条件判断标签元素遍历标签 Thymeleaf表达式变量表达式选择变量表达式消息表达式链接表达式 Thymeleaf内置对象上下文对象上下文变量上下文区域请求对象响应对象会话对象日期对象 实战演练创建控制器创建模板页面 结语 引言 Thy…

Spring AI Java程序员的AI之Spring AI(一)

SpringAI 基础使用 前言Spring AIChatClientImageClientOpenAiAudioTranscriptionClientEmbeddingClient 总结 前言 Spring AI,听着名字就感觉很好使用,快速上手,虽然功能没有太完善,但是社区活跃度很高,可以看看源码…

【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)

零.前置篇章 本篇前置文章为【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植 一.UI设计 介绍使用之前,我们要学习一款LVGL官方的UI设计工具SquareLine Studio,使用图形化设计方式设计出我们想要的界面,然后生成对应源文件导入工程使用…

C++初阶学习第七弹——string的模拟实现

C初阶学习第六弹------标准库中的string类_c语言返回string-CSDN博客 通过上篇我们已经学习到了string类的基本使用,这里我们就试着模拟实现一些,我们主要实现一些常用到的函数。 目录 一、string类的构造 二、string类的拷贝构造 三、string类的析构函…

基于SpringBoot的智能餐厅点餐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

每日一练:不同的二叉搜索树

96. 不同的二叉搜索树 - 力扣(LeetCode) 题目要求: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入&#xff1a…

PAT甲级-1003 Emergency

题目 题目大意 给出n个城市的连通图,其中共有m条边,起点为C1,终点为C2。每个城市都有一定数目的救援队,现从C1出发,每经过一个城市,都可以加上这个城市的救援队。要求从C1到C2最短路径的个数,并…