【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
相关文章
|
1月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
23天前
|
NoSQL Redis 数据库
redis 持久化机制及配置
redis 持久化机制及配置
42 4
|
26天前
|
NoSQL Linux Redis
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
Redis性能优化问题之想确认Redis延迟变大是否因为fork耗时导致的,如何解决
|
26天前
|
NoSQL Redis
Redis性能优化问题之根据 Redis 的 AOF 配置级别优化性能,如何解决
Redis性能优化问题之根据 Redis 的 AOF 配置级别优化性能,如何解决
|
26天前
|
NoSQL Redis
Redis性能优化问题之为什么配置为 appendfsync everysec 的 AOF 也可能导致 Redis 延迟变大
Redis性能优化问题之为什么配置为 appendfsync everysec 的 AOF 也可能导致 Redis 延迟变大
|
27天前
|
监控 NoSQL Redis
Redis问题之什么是AOF持久化,它有哪些优点和缺点
Redis问题之什么是AOF持久化,它有哪些优点和缺点
|
1月前
|
监控 NoSQL Redis
|
13天前
|
缓存 NoSQL Redis
redis数据持久化之RDB和AOF
redis数据持久化之RDB和AOF
|
26天前
|
NoSQL Redis C++
c++开发redis module问题之对于写命令,进行主备复制和写AOF,如何解决
c++开发redis module问题之对于写命令,进行主备复制和写AOF,如何解决