Redis高级-----持久化AOF、RDB原理

news2024/9/21 2:34:07

目前已更新系列:

当前:Redis高级-----持久化AOF、RDB原理

Redis高级---面试总结5种数据结构的底层实现

Redis高级----主从、哨兵、分片、脑裂原理-CSDN博客

Redis高级---面试总结内存过期策略及其淘汰策略

计算机网络--面试知识总结一

计算机网络-----面试知识总结二

计算机网络--面试总结三(Http与Https)

计算机网络--面试总结四(HTTP、RPC、WebSocket、SSE)-CSDN博客

知识积累之ThreadLocal---InheritableThreadLocal总结

并发编程之----线程池ThreadPoolExecutor,Excutors的使用及其工作原理

AOF

AOF配置

AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:

# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

AOF的命令记录的频率也可以通过redis.conf文件来配:

# 表示每执行一次写命令,立即记录到AOF文件
appendfsync always 
# 写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
appendfsync everysec 
# 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

刷盘策略:

aof来持久化数据是通过追加命令的方式实现的,即会记录对数据库修改的命令,如果数据库宕机了,试用aof来恢复数据,只需要将aof中的命令执行一边就可以了,aof提供了三种刷盘策略

首先对于每一个更新命令,都会先将数据存入aof缓冲区中(用户空间),然后通过系统调用将数据复制到内核缓冲区中,

  • always:每次执行更新命令都立刻将数据从aof缓冲区立刻刷盘道aof磁盘文件中
  • erverysec:每秒执行刷盘,即每隔一秒就将数据刷盘道aof文件中
  • no:不执行刷盘任务,而是将刷盘任务交给操作系统由操作系统决定什么时候将数据刷入aof文件

其中always方式进行刷盘的时候是以同步的方式进行的执行fsync()进行刷盘

而试用everysec则是采用异步的方式执行fsync()方式进行刷盘

三种策略对比:

AOF重写机制原理

因为aof是通过追加命令的方式进行持久化的,这会使得aof文件非常大,所以为了优化这个问题,有了aof重写机制,即通过aof重写将aof文件中只保留每个key的最新数据,我们可以到配置文件中配置一个重写阈值比如64MB,即当aof大小超错64mb时执行重写策略,策略如下:

  • 首先会fork一个子进程bgrewriteof,然后对于子进程就有了父进程的页表数据,即映射同一片无力内存空间,并且对于这片空间都是只读权限,然后子进程就开始读取每个数据库中的数据,并且将数据以命令的形式存入aof文件中
  • 然后如果此时主进程收到对数据的修改操作,那么主进程会做如下几件事:
    • 执行客服端的命令对数据进行修改操作
    • 执行写时复制操作,即将访问到的key的物理内存数据拷贝到新的内存中
    • 记录该数据到aof缓冲区中
    • 记录该数据到aof重写缓冲区中(至于为什么看下面,主要就是数据一致性问题)
  • 当子进程对数据重写完成之后会想主进程放松一个信号量去通知已经重写完毕,
  • 然后朱进程接收到之后就会将此时aof缓冲区中之前由于在拷贝之间修改的数据同步刷入到新的aof文件中,这样就可以让新老两个aof文件数据保持一致,然后覆盖原来的aof文件

重上面重写aof来看,整个过程中需要阻塞主进程的过程如下:

  • 首先fork子进程需要阻塞
  • 其次发生了写时复制时会阻塞,因为需要将原来的物理内存数据拷贝,如果这个key较大,那么可能导致阻塞时间较长
  • 子进程在生成了新的aof文件后通知主进程,然后朱进程将aof缓冲区的数据刷到新的aof的,然后将新的aof覆盖旧的aof文件的过程

RDB

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。

执行时机

RDB持久化在四种情况下会执行:

  • 执行save命令
  • 执行bgsave命令
  • Redis停机时
  • 触发RDB条件时

1)save命令

执行下面的命令,可以立即执行一次RDB:

save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。

2)bgsave命令

下面的命令可以异步执行RDB:

这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。

3)停机时

Redis停机时会执行一次save命令,实现RDB持久化。

4)触发RDB条件

Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB
save 900 1  
save 300 10  
save 60 10000

RDB的其它配置也可以在redis.conf文件中设置:

# 是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的话不值钱
rdbcompression yes

# RDB文件名称
dbfilename dump.rdb  

# 文件保存的路径目录
dir ./

RDB原理

bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。

fork采用的是copy-on-write技术:

  • 当主进程执行读操作时,访问共享内存;
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

bgsave快照过程中,如果主线程修改了共享数据,发生了写时复制后,rdb快照保存的是原本的内存数据,而主线程刚修改的数据,是没办法在这一时间写入rdb文件的,只能交由下一次的bgsave快照。
所以redis在使用bgsave快照过程中,如果主线程修改了内存数据,不管是共享的内存数据,rdb
快照都无法写入主线程刚修改的数据,因为此时主线程(父进程)的内存数据和子进程的内存数据已经分
离了,子进程写入到rdb文件的内存数据只能是原本的内存数据。如果系统恰好在rdb快照文件创建完毕后崩溃了,那么redis将会丢失主线程在快照期间修改的数据。
 

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

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

相关文章

3.数据结构-c/c++实现栈(详解,栈容量可以动态增长)

一.栈的基本介绍 栈是一种只能够在一端进行插入和删除的顺序表。如下图 空栈:表示不含任何元素的栈 栈顶:表示允许进行插入和删除元素的一端 栈底:表示不允许进行插入和删除元素的一端 即栈是一种后进先出的线性表数据结构 二.栈的常见操…

尚硅谷Vue入门视频 笔记

尚硅谷视频:https://www.bilibili.com/video/BV1Zy4y1K7SH/?spm_id_from333.999.0.0&vd_sourcecec13bbe100bddfff8baf29d18ed8994 文章目录 模板语法data与el的2种写法MVVM模型事件事件修饰符事件的基本使用 计算属性简写形式 监视属性绑定样式条件渲染列表渲…

多线程篇(可见性 原子性 有序性(可见性))(持续更新迭代)

目录 一、volatile(关键字)(并发编程之美) 1. 前言 2. synchronized与volatile关键字对比 3. 什么时候使用volatile关键字 二、volatile(关键字)(深入理解JVM第三版) 1. 前言 …

儿童护眼灯哪个牌子好?家长必看这些眼科医生推荐的台灯

如今,学生们经常长时间使用平板电脑、手机和电脑等电子设备,这些设备的屏幕会产生频闪和蓝光辐射,进而影响视力健康。因此,护眼成为了家长们普遍关心的问题。视力疲劳和眼部疾病不仅会影响个人的生活质量,还可能引发长…

申请超长期IP地址SSL证书

随着互联网技术的不断发展,信息安全成为了企业和个人关注的核心议题之一。SSL证书不仅能够加密网站的通信数据,保护用户隐私,还能增强网站的可信度,提升搜索引擎排名等。通常情况下,SSL证书是绑定到域名上的&#xff0…

09--kubernetes持久化存储和StatefulSet控制器

前言:本章是k8s持久化存储的详细笔记,由持久化引申出来的statefulset控制器和无头svc都会在本章有详细记录。 1、K8s持久化存储PV和PVC 在前面文章已经使用卷挂载的方式将pod文件持久化保存在宿主机中,但实际工作中pod往往会以多副本形式存…

骨传导耳机哪个牌子最好?今天安利五款好口碑骨传导耳机!

基于对运动耳机多年的使用和深入研究,我想传达几个朴素却重要的观点:购买前请三思,避免盲目追求潮流。虽然网络上的热门款式引人瞩目,但它们的热度可能转瞬即逝;而高价位的知名品牌耳机,虽然品质有保证&…

SpringBoot整合Thymleaf实现页面静态化

1. 问题需求分析 在做乐优商城时,页面是通过Thymeleaf模板引擎渲染后返回到客户端。当商品详情页数据渲染时,在后台需要大量的数据查询,而后渲染得到HTML页面。在用户访问量大的情况下会对数据库造成压力,并且请求的响应时间过长…

开放式耳机与入耳式耳机相比,有哪些优劣势?权威推荐5个实用好用品牌

​开放式耳机其实相对于入耳式耳机来说区别还是比较大的。开放式耳机现在超火,它们不塞进耳朵,这样长时间戴着耳朵也不会难受,还能保护耳朵卫生,特别受爱运动和喜欢研究耳机的朋友们欢迎。不过市面上的开放式耳机太多了&#xff0…

glsl着色器学习(三)

前面两篇文章已经创建好了顶点着色器和片段着色器并编译成功,下面将创建program(程序),将着色器链接起来 创建Program const prg gl.createProgram(); gl.attachShader(prg, vertexShader); gl.attachShader(prg, fragmentShader); gl.linkProgram(pr…

【无标题】docker-compose一键部署项目,haproxy容器代理多个web或java容器

# 创建脚本,可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar 一、思路分析: (1)nginx 1、下载镜像,将本地的dist项目的目录挂载在容器的/usr/share/nginx/html/ …

LLM大模型教程:大模型技术名词和概念太多了,一手学习笔记

、、 构建AI化需要的知识体系 Semantic Kernel Semantic Kernel是Microsoft推出的一个开源框架,旨在帮助开发者构建和部署AI应用,特别是那些需要理解和生成自然语言的应用。它提供了一种结构化的方式来定义和管理技能(Skills)&…

【Canvas技法】五种函数化回文边纹纹饰荟萃

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五种函数化回文边纹纹饰荟萃</title><style type"text…

一文速学ChatBi“与数据库对话“大模型技术原理及框架一览

前言 上期写了NL2SQL&#xff0c;相信看过的朋友应该都对现在大模型在数据交互办公层面的探索和发展都十分感兴趣&#xff0c;在此商业化的产品市场上也有很多&#xff0c;比如阿里云的析言GBI&#xff1a; 腾讯云的ChatBI&#xff1a; 像此类的产品可以说是最贴切业务的。 在…

C++笔记16•数据结构:关联式容器map和set•

map和set 1.关联式容器 前面介绍的的是序列式容器&#xff1a;vector、list、deque等容器。这次博客介绍STL新的容器成员&#xff0c;那就是关联式容器&#xff1b;顾名思义关联式容器就是容器存在中的数据之间存在联系&#xff08;关联&#xff09;。与序列式容器不同的是&am…

linux入门系列【1】常用命令

一、简介 linux 基本操作命令,便于我们去使用命令帮助我们去检索和排查问题 二、常用命令 1.磁盘空间排查 1.1 查看磁盘空间分布情况 du -ah .|sort -hr 在对应目录下执行则是查看对应目录的文件分布以及大小情况,一般用于查看某个文件夹目录数据情况 1.2 查看深度层级为…

Java中的Set(如果想知道Java中有关Set的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在Java编程中&#xff0c;集合框架&#xff08;Collections Framework&#xff09;是处理数据结构和算法的基础工具之一。它提供了一套强大且灵活的接口和类&#xff0c;用于存储和操作不同类型的数据集合。在这其中&#xff0c;Set接口扮演着一个重要角色。与…

vue-router基本流程及其案例分析

web发展历程 1.后端实现路由 在这个阶段&#xff0c;前端基本上只写界面&#xff0c;也就是html,css,js那些东西&#xff0c;然后在界面中挖槽用来接后端数据&#xff0c;包括路由也由后端负责&#xff0c;在这个阶段中&#xff0c;web开发非常依赖后端&#xff0c;常见的后端…

系列精选 |【梧桐数据库】产品架构层次解析-总述

梧桐数据库中秋特别活动免费领取大闸蟹 抽奖免费领取大闸蟹 以下是正文 在浩瀚的数据世界里&#xff0c;梧桐数据库犹如一颗璀璨的星辰&#xff0c;它的设计如同一首细腻的诗歌&#xff0c;每一个层次都是优美的韵律&#xff0c;为我们构建了一个强大而灵动的数据天地。 梧桐数…

西中区2024年度安全知识竞赛活动方案

为有效预防安全生产事故的发生&#xff0c;深化西中区全体员工对安全生产的认识&#xff0c;切实提升全体人员的安全意识和自我保护能力&#xff0c;夯实安全知识基础&#xff0c;丰富安全文化内涵&#xff0c;推动安全生产工作更加规范化、系统化&#xff0c;根据西中区安全生…