redis详细教程(5.AOP和RDB持久化)

AOF(Append Only File)日志和RDB(Redis Database Backup)持久化是Redis中两种重要的数据持久化机制。

RDB持久化机制原理RDB是Redis提供的一种数据快照保存机制,它将某个时间点的数据库状态保存到一个RDB文件中。这个文件非常适合用于灾难恢复,因为它是自包含的,并且可以被复制到任何其他支持RDB格式的Redis服务器上。

RDB

RDB的触发方式有两种:

  1. 自动触发:Redis可以在配置文件中设置自动保存点,例如save 60 1000,意味着如果60秒内有1000个键被改变,则自动执行快照保存。这是通过比较上一次快照后写操作的数量来决定是否触发新的快照。
  2. 手动触发:用户可以通过发送SAVE或BGSAVE命令来手动触发RDB快照。SAVE命令会阻塞Redis直到快照完成,而BGSAVE命令会在后台异步执行快照,不会阻塞主线程。

当Redis配置了RDB持久化并且满足触发条件后,它会执行以下步骤来创建RDB快照文件:

1.Fork子进程

Redis主进程会调用fork()系统调用创建一个子进程。这个操作是原子的,并且开销很小,因为它仅复制父进程的内存页面,而不会复制实际的数据,子进程会共享父进程的数据,这意味着它能够访问相同的数据集,而不需要额外的内存消耗。

2.生成RDB文件

子进程开始将内存中的数据序列化到一个RDB文件中。这个序列化过程包括将键值对、集合、有序集合、哈希表等数据结构转换为特定的格式,并写入到磁盘上的RDB文件中,这个过程中,子进程会锁定内存中的数据,以确保数据的一致性。但由于数据是共享的,主进程仍然可以继续处理客户端的请求,只是对新修改的数据不进行锁定。

3.替换旧的RDB文件

一旦RDB文件创建完成,子进程会将新的RDB文件重命名为与旧的RDB文件相同的文件名,通常这个过程涉及到一个临时文件的重命名操作。

4.清理子进程

子进程完成RDB文件的创建后,会退出。操作系统会清理子进程使用的资源。

配置持久化:

1.设置自动保存点

设置在60秒内至少有1000个键被改变时自动保存数据:

save 60 1000

2.启用或禁用RDB持久化:

save ""

通过这些配置,你可以灵活地控制Redis的RDB持久化行为,以满足不同的业务需求和数据安全要求。

AOP

AOF通过记录Redis服务器接收到的每条写命令来记录数据变化,并将这些命令追加到AOF文件中,为了避免AOF文件过大,Redis会定期对AOF文件进行重写,只保留必要的命令,这个过程称为AOF重写。

当触发AOF重写时,Redis会fork出一个子进程来处理AOF文件的重写,以防止主进程阻塞无法提供服务,子进程遍历Redis内存快照中的数据并写入临时AOF文件,同时主线程会将新的写指令写入aof_buf和aof_rewrite_buf两个重写缓冲区。

子进程结束临时AOF文件写入后,通知主进程,主进程会将aof_rewrite_buf缓冲区中的数据写入到子进程生成的临时AOF文件中,主进程使用临时AOF文件替换旧AOF文件,完成整个重写过程。


文件写入策略:
appendfsync配置项控制将aof_buf中的数据同步到磁盘的策略,有三种选项:Always、Everysec、No。

  1. Always:每个写命令执行完,立马同步地将日志写回磁盘;数据基本不丢失,性能较差。
  2. Everysec:每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;宕机时丢失1秒内的数据,性能较好。
  3. No:由操作系统控制何时将缓冲区内容写回磁盘;宕机时丢失数据较多,通常同步周期最长30秒。

持久化数据恢复:
当Redis重启时,会直接从appendonly.aof文件中读取日志,恢复Redis内存数据。通过这些机制,AOF持久化确保了Redis的数据安全性和一致性,同时提供了灵活的数据恢复能力。

优缺点

AOF和RDB持久化的优缺点如下:
RDB数据不完整,两次备份之间会丢失数据;AOF相对完整,取决于刷盘策略。RDB会有压缩,占用内存小;而AOF记录命令,文件体积很大。RDB宕机恢复速度很快,而AOF慢,因为要执行一遍命令。通常,为了结合RDB的快速数据恢复能力和AOF的数据安全性,实际开发中往往会同时使用两者来确保数据的安全性和快速恢复。

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

uni-app 运行HarmonyOS项目

1. uni-app 运行HarmonyOS项目 文档中心 1.1. HarmonyOS端 1.1.1. 准备工作 (1)下载DevEco Studio开发工具。   (2)在 DevEco Studio 中打开任意一个项目(也可以新建一个空项目)。   (3&…

WPF+MVVM案例实战(十三)- 封装一个自定义消息弹窗控件(上)

文章目录 1、案例效果2、功能实现1、创建文件2、资源文件获取3、枚举实现3、弹窗实现1、界面样式实现2、功能代码实现4、总结1、案例效果 2、功能实现 1、创建文件 打开 Wpf_Examples 项目,我们在用户控件类库中创建一个窗体文件 SMessageBox.xaml,同时创建枚举文件夹 Enum…

uniapp封装movable-area+movable-view组件,实现悬浮按钮可拖动,自动吸附边缘效果,自动向两边靠拢

兼容H5、App、微信小程序 子组件 /components/ShopCar/ShopCar.vue <template><view class"ShopCar"><movable-area class"movableArea" v-if"isShow"><movable-view class"movableView" :position"posi…

vector中去除重复的元素

1. 使用 std::sort 和 std::unique 这种方法首先对 std::vector 进行排序&#xff0c;然后使用 std::unique 函数将相邻的重复元素移到末尾&#xff0c;最后使用 erase 函数删除这些重复元素。 #include <iostream> #include <vector> #include <algorithm>…

Unity BesHttp插件修改Error log的格式

实现代码 找到插件的 UnityOutput.cs 然后按照需求替换为下面的代码即可。如果提示 void ILogOutput.Flush() { } 接口不存在&#xff0c;删除这行代码即可。 using Best.HTTP.JSON.LitJson; using System; using System.Collections.Generic; using UnityEngine; using Syst…

Python热化学固态化学模型模拟

&#x1f3af;要点 使用热化学方式&#xff0c;从材料项目数据库获得热力学数据构建固态材料无机合成模拟模型。固态反应网络是热力学相空间的模型&#xff0c;使得能够纳入简单的反应动力学行为。反应坐标图可视为加权有向图&#xff0c;其表示出热力学相空间的密集连接模型。…

winSCP使用root账户登录群晖

xshell或者putty 登录SSH 1. 获取root权限 sudo -i2. 设置一下 root账号的密码 synouser —setpw root 1234563. 设置一下root登录权限&#xff08;winSCP来登录&#xff09; vi /etc/ssh/sshd_config# Authentication:#LoginGraceTime 2m #PermitRootLogin prohibit-passw…

详解软件设计中分库分表的几种实现以及应用示例

详解软件设计中分库分表的几种实现以及应用示例https://mp.weixin.qq.com/s?__bizMzkzMTY0Mjc0Ng&mid2247485108&idx1&sn8b3b803c120c163092c70fa65fe5541e&chksmc266aaa1f51123b7af4d7a3113fe7c25daa938a04ced949fb71a8b7773e861fb93d907435386#rd

简缩极化模型+简缩极化求解用优化的方法,也需要保证方程和未知数个数

一个定标器可以得到一个复数矢量&#xff0c;4个实数方程 而模型中我们有&#xff0c;每个定标器有不同的A和φ (两个实数)和相同的R和δc &#xff08;4个复数&#xff09;

多浏览器同步测试工具的设计与实现

在做Web兼容测试时&#xff0c;测试人员往往需要在不同浏览器上重复执行相同的操作。 现有自动化录制手段&#xff0c;其实是后置的对比&#xff0c;效率与反馈都存在延迟&#xff0c;执行过程相对是黑盒的&#xff0c;过程中如果测试人员没细化到具体的校验点&#xff0c;即使…

Google Recaptcha V2 简单使用

最新的版本是v3&#xff0c;但是一直习惯用v2&#xff0c;就记录一下v2 的简单用法&#xff0c;以免将来忘记了 首先在这里注册你域名&#xff0c;如果是本机可以直接直接填 localhost 或127.0.0.1 https://www.google.com/recaptcha/about/ 这是列子 网站密钥&#xff1a;是…

【初识Linux】

寻不到花的折翼枯叶蝶&#xff0c;永远也看不见凋谢............................................................................. 文章目录 前言 一、【基本指令】 1、ls 2、pwd 3、cd 4. touch 5.mkdir 6.rmdir 7、rm 8.man 9.cp 10、mv 11、cat 12、tac 13、more 14、le…

操作系统知识要点

一.操作系统的特性 1.并发性 在多道程序环境下&#xff0c;并发性是指在一段时间内&#xff0c;宏观上有多个程序同时运行&#xff0c;但实际上在单CPU的运行环境&#xff0c;每一个时刻只有一个程序在执行。 因此&#xff0c;从微观上来说&#xff0c;各个程序是交替、轮流…

jenkins搭建及流水线配置

1.安装docker curl https://mirrors.aliyun.com/repo/Centos-7.repo >> CentOS-Base-Aliyun.repomv CentOS-Base-Aliyun.repo /etc/yum.repos.d/yum -y install yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/…

混沌接口压测利器Fortio:从TCP/UDP到gRPC,全方位覆盖云原生应用性能测试

#作者&#xff1a; 西门吹雪 文章目录 Fortio 安装docker 安装:MacOS安装&#xff1a;linux安装:对于http负载生成最重要的标志:Fortio server 功能 TCPUDPgRPC负载测试gRPC 负载测试在k8s或者容器中使用fortio进行压测fortio 直接在docker中作为sidecar使用 Fortio是一个微服…

MyBatisPlus 中 LambdaQueryWrapper使用

一、前言 MyBatis-Plus是一个强大的MyBatis扩展插件&#xff0c;它为MyBatis提供了许多实用的功能&#xff0c;其中之一就是LambdaQueryWrapper。LambdaQueryWrapper是一个条件构造器&#xff0c;用于构建SQL查询条件。通过使用LambdaQueryWrapper&#xff0c;我们可以以更简洁…

【笔记】数据结构与算法

参考链接&#xff1a;数据结构(全) 参考链接&#xff1a;数据结构与算法学习笔记 一些PPT的整理&#xff0c;思路很不错&#xff0c;主要是理解角度吧&#xff0c;自己干啃书的时候结合一下会比较不错 0.总论 1.数据 注&#xff1a;图是一种数据结构&#xff01;&#xff01;…

Chromium HTML5 新的 Input 类型range对应c++

一、Input 类型: range range 类型用于应该包含一定范围内数字值的输入域。 range 类型显示为滑动条。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form a…

leetcode - 684. 冗余连接

684. 冗余连接 解决思路 大致上的思路就是将元素加入到 并查集 中&#xff0c;那么在遍历到边的时候先去判断的边的两个端点的 根节点 是否相等&#xff0c;如果相等&#xff0c;那么就代表此刻把这条边加上去就形成了环【可以这么理解&#xff0c;如果形成了环&#xff0c;那…

【力扣打卡系列】二叉树·灵活运用递归

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day16 相同的树 题目描述 解题思路 边界条件&#xff0c;其中一个节点为空&#xff0c;return 只有p和q均为空才返回true&#xff0c;因此可以简写为pqreturn&#xff0c;先判断节点值是否一样&…