Redis学习笔记-AOF日志&重写机制

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: Redis学习笔记-AOF日志&重写机制

Redis 使用最多的场景是 缓存,若出现服务器宕机的情况,内存中的数据将全部丢失,若恢复数据的时候从后端数据库读取就会给数据库造成很大的压力,并且数据恢复缓慢,所以对于 Redis 来说,实现数据的持久化是非常重要的,而 AOF日志 和 RDB快照是 Redis 实现持久化的两大机制,这篇文章学习一下 AOF 持久化日志。

1.笔记图

2.AOF 日志实现


  • AOF 是一种写后日志,即先执行 Redis 命令,后记录日志。

3.写日志先后顺序的思考

  • Redis 为了避免额外开销,写 AOF 日志的时候不会对命令语法检查
  • 如果先写日志再执行命令可能会记录错误的命令,恢复数据时,可能出错
  • 只有能执行成功的命令,才会被记录到日志中
  • 命令执行完后写日志不会阻塞当前的写操作

4.AOF 日志记录的内容举例说明

#举例
set testkey testvalue

日志记录内容如下:

*3
$3
set
$7
testkey
$9
testvalue

Tips:其中 *3 表示有 3 个部分,$3 表示后面紧跟的键/值3 字节。

5.由 AOF 日志记录引发的潜在风险思考

  • 如果刚执行完,日志没写就宕机,数据就有丢失风险
  • 在日志文件写入磁盘时,磁盘写压力大,会导致写盘慢,后续的操作也无法执行

6.潜在风险对应的三种写回策略

  • Always:同步写回,每个写命令执行完,立马同步地将日志写回磁盘,可以做到基本不丢数据,但它在写命令后有一个慢速的落盘操作,不可避免会影响主线程性能
  • Everysec:每秒写回,每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘,避免了同步写回的性能开销,但是如果发生宕机,上一秒内未落盘的命令操作仍然会丢失
  • No:操作系统控制的写回,每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘,落盘的时机已经不在 Redis 手中了,只要 AOF 记录没有写回磁盘,一旦宕机对应的数据就丢失了

7.性能问题

  • 文件系统本身对文件大小有限制,无法保存过大的文件
  • 如果文件太大,之后再往里面追加命令记录的话,效率也会变低
  • 如果发生宕机,AOF 中记录的命令要一个个被重新执行,恢复起来缓慢影响业务

8.AOF 重写机制

  • AOF 重写机制就是在重写时根据数据库的现状创建一个新的 AOF 文件,然后对每一个键值对用一条命令记录它的写入
  • AOF 文件是以追加的方式,逐一记录接收到的写命令的,AOF 文件会记录相应的多条命令
  • 重写机制具有 多变一 功能,旧日志文件中的多条命令,在重写后的新日志中变成了一条命令

Tips:举例:对一个列表先后做了 6 次修改操作后,列表的最后状态是[“D”, “C”, “N”],此时,只用 LPUSH u:list “N”, “C”, "D"这一条命令就能实现该数据的恢复,这就节省了五条命令的空间。

9.AOF 重写机制引发的阻塞思考

  • 重写过程是由后台子进程 bgrewriteaof 来完成的,不会阻塞主线程
  • 一个拷贝:每次执行重写时,主线程 fork 出后台的 bgrewriteaof 子进程,bgrewriteaof 子进程就可以在不影响主线程的情况下,逐一把拷贝的数据写成操作,记入重写日志
  • 两处日志:如果有写操作,第一处日志就是指正在使用的 AOF 日志,Redis 会把这个操作写到它的缓冲区,即使宕机了,这个 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
相关文章
|
3天前
|
存储 NoSQL Redis
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
Redis 是一个内存数据库,意味着它主要将数据存储在内存中,从而能够提供极高的性能。然而,作为内存数据库,Redis 默认情况下的数据不会永久保存。为了确保数据在重启或故障后能够恢复,Redis 提供了几种 **持久化机制**。这些机制允许 Redis 将内存中的数据保存到硬盘上,从而实现数据持久化。
42 22
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
|
1月前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
47 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
2月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
34 3
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
71 1
|
3月前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
95 0
|
存储 消息中间件 NoSQL
|
1天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
109 85
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
1月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
下一篇
DataWorks