【Redis】Redis AOF持久化

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Redis 版,经济版 1GB 1个月
简介: 写入AOF文件不就是同步了吗?这里的写入和 同步的区别是什么?这里的写入AOF文件, 在现代操作系统中,用户调用了write()函数来将数据写入到文件中,但是操作系统通常会将写入的数据暂时保存在一个 ** 内存缓冲区** 里面,等这个缓冲区的空间被填满、或者超过了指定的时限之后

1AOF持久化的实现


AOF 持久化分为  : 命令追加(append)->文件写入->文件同步(sync) 三个步骤

写入AOF文件不就是同步了吗?这里的写入和 同步的区别是什么?

这里的写入AOF文件, 在现代操作系统中,用户调用了write()函数来将数据写入到文件中,但是操作系统通常会将写入的数据暂时保存在一个 ** 内存缓冲区** 里面,等这个缓冲区的空间被填满、或者超过了指定的时限之后,才真正的将缓冲区中的数据写入到磁盘里面;所以 这里的写入AOF文件,实际上可能并没有真正的落到磁盘里面; 这种做法虽然提高了效率,但是也为写入数据带来了安全问题,因为如果这时候计算机掉电,这一部分数据就会丢失 为此系统提供 了 fsync和fdatasync两个同步函数,他们可以强制操作系统立马将缓冲区中的数据写入到磁盘立马! 所有这里说的 同步 就是让缓冲区的数据写入到磁盘从而实现真正的持久化!

2AOF文件的载入与数据还原


Redis服务器只要读入并重新执行一遍AOF文件里面保存的写命令,就可以还原了服务器关闭之前的数据库状态了

在这里插入图片描述

3AOF文件重写


AOF文件经过一段时间之后会越来越大, 所以就需要重写AOF文件来减小文件大小; 实际上,AOF文件重写并不需要对现有的AOF文件进行任何读取、分析或者写入操作;这个功能是通过读取 当前数据库状态来实现的;

redis提供了aof_rewrite函数来重写

如果用redis的服务器进程来进行重写,就会影响redis整体的性能; 那么redis实现的方式是  AOF后台重写

AOF后台重写

在这里插入图片描述

redis 创建一个子进程出来专门做AOF重写操作;

怎么解决AOF在重写的时候,又有新的写命令在执行?

为了解决这种数据不一致的问题,redis服务器设置了一个AOF重写缓冲区,这个缓冲区在服务器创建子进程之后开始使用,当redis服务器执行完了一个写命令之后,它会同事将这个命令发送给 AOF缓冲区和AOF重写缓冲区;

AOF重写缓冲区是怎么被使用的?

当子进程完成AOF重写工作之后,它会向父进程发送一个信号量,父进程在接收到改信号之后,会调用一个信号处理函数,并执行以下操作: 1.将AOF重写缓冲去中的所有内容写入到新的AOF文件中;这是新的AOF文件所保存的数据库状态将和服务器当前的数据库状态一致; 2.对新的AOF文件进行改名,原子的覆盖现有的AOF文件,完成新旧两个AOF文件的替换

这个信号处理函数执行完毕之后,父进程就可以继续像往常一样接受命令了,整个AOF后台重写过程中,只有这个信号处理函数是阻塞主进程的

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
210 2
|
2月前
|
NoSQL 安全 Unix
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅(中)
Redis源码、面试指南(4)单机数据库、持久化、通知与订阅
30 0
|
17天前
|
存储 NoSQL Redis
《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化
《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化
|
17天前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
29 1
|
7天前
|
NoSQL Redis 数据库
怎么查看 Redis 的持久化机制
【7月更文挑战第6天】
|
10天前
|
存储 缓存 NoSQL
Redis持久化
Redis持久化
24 0
|
17天前
|
NoSQL 容灾 Redis
Redis系列学习文章分享---第十一篇(Redis高级实战篇---RDB演示 +RDB的fork原理+A0F演示 +RDB和AOF)
Redis系列学习文章分享---第十一篇(Redis高级实战篇---RDB演示 +RDB的fork原理+A0F演示 +RDB和AOF)
17 0
|
17天前
|
NoSQL 安全 Redis
Redis的RDB和AOF详解
Redis的RDB和AOF详解
16 0
|
19天前
|
存储 缓存 JSON
Redis-持久化-淘汰机制-IO策略
Redis-持久化-淘汰机制-IO策略
|
2月前
|
存储 NoSQL 程序员
Redis(持久化 -- RDB & AOF)
Redis(持久化 -- RDB & AOF)
36 2