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

ops/2024/10/31 7:12:19/

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.ppmy.cn/ops/129802.html

相关文章

算法定制LiteAIServer视频智能分析软件的过亮、过暗及抖动检测应用场景

在现代社会中,视频监控系统扮演着举足轻重的角色,其视频质量直接关乎监控系统的可靠性与有效性。算法定制LiteAIServer通过引入抖动检测和过亮过暗检测功能,为视频监控系统的稳定性和用户体验带来了显著提升。 以下是对这两种功能的技术实现、…

macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载

macOS Sonoma 14.7.1 (23H222) Boot ISO 原版可引导镜像下载 2024 年 10 月 28 日,Apple 智能今日登陆 iPhone、iPad 和 Mac。用户现可借助 Apple 智能优化写作,为通知、邮件和消息生成摘要,体验交互更自然、功能更丰富的 Siri,使…

Diving into the STM32 HAL-----Interrupts

硬件管理就是处理异步事件。其中大部分来自硬件外围设备。例如,计时器达到配置的 period 值,或者 UART 在数据到达时发出警告。 中断是一个异步事件,它会导致按优先级停止执行当前代码(中断越重要,其优先级越高;这将导…

目录遍历漏洞

目录遍历 目录 概念漏洞分析 加密型传递参数编码绕过目录限定绕过绕过文件后缀过滤(截断上传原理) 漏洞挖掘 访问图片文件测试时去掉文件名只访问目录路径搜索引擎谷歌关键字 pikachu目录遍历 目录遍历与任意文件下载其实差不多,但是如果目录遍历比如etc/passwd只能看不能下…

MySQL安装配置教程

以下是 MySQL 在 Windows 系统下的安装配置教程: 1. 下载 MySQL 访问 MySQL 官方网站(https://dev.mysql.com/downloads/mysql/),根据您的操作系统版本(32 位或 64 位)选择合适的 MySQL 安装包。一般建议下载社区版(Community Server),它是免费且功能丰富的版本。2. …

51c深度学习~合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/12369516 #卷积神经网络压缩方法总结 本文介绍了卷积网络压缩的常见方法:低秩近似、剪枝与稀疏约束、参数量化、二值化网络、知识蒸馏和浅层/轻量网络。 我们知道,在一定程度上,网络越深…

Golang | Leetcode Golang题解之第519题随机翻转矩阵

题目: 题解: type Solution struct {m, n, total intmp map[int]int }func Constructor(m, n int) Solution {return Solution{m, n, m * n, map[int]int{}} }func (s *Solution) Flip() (ans []int) {x : rand.Intn(s.total)s.total--if y, o…

ai智能语音电销机器人可以做哪些事情?

AI智能语音电销机器人是结合人工智能技术进行自动化电话销售和客户互动的工具,能够完成一系列任务,有助于提升销售效果、优化客户体验和提高工作效率。以下是AI智能语音电销机器人可以做的一些主要事情: 1. 自动拨号 AI语音电销机器人可以自…