Redis AOF重写问题之正常响应用户命令如何解决

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis AOF重写问题之正常响应用户命令如何解决

问题一:Redis 使用 AOF 持久化时,AOF 文件是如何增长的,以及 Redis 如何解决 AOF 文


Redis 使用 AOF 持久化时,AOF 文件是如何增长的,以及 Redis 如何解决 AOF 文件过大的问题?


参考回答:

Redis 使用 AOF 持久化时,AOF 文件会随着 Redis 处理的写命令增多而逐渐变大,因为 AOF 会以追加的方式记录每一条 Redis 的写命令。为了解决 AOF 文件过大的问题,Redis 引入了 AOF rewrite 机制(AOFRW)。AOFRW 会移除 AOF 中冗余的写命令,并以等效的方式重写、生成一个新的 AOF 文件,从而减少 AOF 文件的大小。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/665906



问题二:AOFRW 是如何工作的?Redis 在 AOF 重写期间如何保证正常响应用户命令?


AOFRW 是如何工作的?Redis 在 AOF 重写期间如何保证正常响应用户命令?


参考回答:

AOFRW 工作时,Redis 首先会 fork 一个子进程进行后台重写操作。子进程会将执行 fork 那一刻 Redis 的数据快照全部重写到一个临时 AOF 文件中。在 AOF 重写期间,主进程依然可以正常响应用户命令,并将执行的写命令写入 aof_buf 和 aof_rewrite_buf。其中,aof_rewrite_buf 用于缓存重写期间主进程产生的增量变化。在子进程重写的后期阶段,主进程会将 aof_rewrite_buf 中累积的数据使用 pipe 发送给子进程,子进程会将这些数据追加到临时 AOF 文件中。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/665911



问题三:如果 aof_rewrite_buf 中堆积了非常多的数据,导致子进程无法全部消费完,Redis 会如何处理?


如果 aof_rewrite_buf 中堆积了非常多的数据,导致子进程无法全部消费完,Redis 会如何处理?


参考回答:

如果 aof_rewrite_buf 中堆积了非常多的数据,导致在重写期间子进程无法将 aof_rewrite_buf 中的数据全部消费完,那么 aof_rewrite_buf 剩余的数据将在重写结束时由主进程进行处理。主进程会将这部分数据追加到临时 AOF 文件中,以确保数据的完整性和一致性。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/665914



问题四:当子进程完成 AOF 重写并退出后,主进程会执行哪些操作来替换旧的 AOF 文件?


当子进程完成 AOF 重写并退出后,主进程会执行哪些操作来替换旧的 AOF 文件?


参考回答:

当子进程完成 AOF 重写并退出后,主进程会在 backgroundRewriteDoneHandler 中处理后续的事情。首先,主进程会将重写期间 aof_rewrite_buf 中未消费完的数据追加到临时 AOF 文件中。然后,当一切准备就绪时,Redis 会使用 rename 操作将临时 AOF 文件原子地重命名为 server.aof_filename,此时原来的 AOF 文件会被覆盖。至此,整个 AOFRW 流程结束,新的 AOF 文件!

将用于后续的持久化和恢复操作。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/665916



问题五:AOFRW过程中,为什么会产生额外的内存开销?


AOFRW过程中,为什么会产生额外的内存开销?


参考回答:

在AOFRW(AOF重写)期间,Redis主进程会将fork之后的数据变化写入aof_rewrite_buf中,而这个缓冲区与原有的aof_buf中的内容大部分是重复的。这导致了额外的内存冗余开销,因为两个缓冲区都保存了相似的数据。通过Redis INFO命令中的aof_rewrite_buffer_length字段,可以看到aof_rewrite_buf占用的内存大小,这在高写入流量下可能会接近甚至超过aof_buffer_length,几乎浪费了一倍的内存空间。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/665917

相关实践学习
基于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
相关文章
|
5天前
|
存储 缓存 NoSQL
Redis中的rdb和aof
本文深入探讨了Redis的持久化机制,包括RDB和AOF两种方式。详细解释了RDB的工作原理、优势和劣势,以及AOF的实现原理、配置选项、文件重写机制和三种数据同步方式,还介绍了AOF文件修复工具redis-check-aof的使用,并通过实例展示了如何开启和配置AOF持久化方式。
Redis中的rdb和aof
|
19天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
12天前
|
监控 NoSQL Redis
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
redis-server --service-install redis.windows.conf --loglevel verbose 命令的作用是什么?
24 3
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
3天前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
10 0
|
3天前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
12 0
|
2月前
|
监控 NoSQL Redis
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
|
2月前
|
SQL 缓存 NoSQL
【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
|
2月前
|
缓存 监控 NoSQL
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
|
2月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
下一篇
无影云桌面