首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏以Java架构赢天下

    AOF持久化

    与RDB相比,AOF的实时性更好,因此已成为主流的持久化方案。 1. 开启AOF Redis服务器默认开启RDB,关闭AOF;要开启AOF,需要在配置文件中配置: appendonly yes 2. 文件重写是指定期重写AOF文件,减小AOF文件的体积。需要注意的是,AOF重写是把Redis进程内的数据转化为写命令,同步到新的AOF文件;不会对旧的AOF文件进行任何读取、写入操作! auto-aof-rewrite-percentage:执行AOF重写时,当前AOF大小(即aof_current_size)和上一次重写时AOF大小(aof_base_size)的比值。 5.2) 父进程把AOF重写缓冲区的数据写入到新的AOF文件,这样就保证了新AOF文件所保存的数据库状态和服务器当前状态一致。 5.3) 使用新的AOF文件替换老文件,完成AOF重写。 3. 启动时加载 前面提到过,当AOF开启时,Redis启动时会优先载入AOF文件来恢复数据;只有当AOF关闭时,才会载入RDB文件恢复数据。 当AOF开启,且AOF文件存在时,Redis启动日志: ?

    1.1K31发布于 2020-02-13
  • 来自专栏LeetCode

    redis RDB&&AOF

    虽然 AOF 重写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失。 Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。 AOF 的缺点 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。

    93800发布于 2019-03-04
  • 来自专栏架构之路

    redis AOF保存机制

    缓存追加:AOF 程序根据接收到的命令数据,将命令转换为网络通讯协议的格式,然后将协议内容追加到服务器的 AOF 缓存中。 文件写入和保存:AOF 缓存中的内容被写入到 AOF 文件末尾,如果设定的 AOF 保存条件被满足的话, fsync 函数或者 fdatasync 函数会被调用,将写入的内容真正地保存到磁盘中。  中的缓存写入到 AOF 文件。 AOF 保存模式 Redis 目前支持三种 AOF 保存模式,它们分别是: AOF_FSYNC_NO :不保存。 AOF_FSYNC_EVERYSEC :每一秒钟保存一次。 停机时丢失的数据量 AOF_FSYNC_NO 阻塞 阻塞 操作系统最后一次对 AOF 文件触发 SAVE 操作之后的数据。

    1.1K60发布于 2018-03-19
  • 来自专栏洁癖是一只狗

    Redis持久化 AOF

    AOF介绍 默认情况下Redsi是没有开启AOF进行持久化的,当开启AOF的时候,我们每执行一条命令,都会将命令写到磁盘的AOF文件中。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作,AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis AOF当前尺寸 aof_base_zize AOF上次启动和重写的尺寸 当满足下面规则就会自动触发时机 aof_current_size>auto-aof-rewrite-min-size of_current_size-aof_base_zize /aof_base_zize>auto-aof-rewrite-percentage 当前aof文件大小大于配置参数aof最小文件大小 增长率大于配置参数的增长率 AOF 优点 使用AOF 会让你的 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。

    55120发布于 2020-06-15
  • 来自专栏后端知识体系

    Redis持久化AOF

    # Redis持久化AOF Redis主要包含2中持久化方式,即RDB和AOF,本文主要介绍AOF,RDB见本站的另一篇博客Redis持久化RDB (opens new window) # 什么是AOF AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF: # 是否开启AOF功能,默认是no appendonly yes # AOF文件的名称 appendfilename "appendonly.aof 子进程遍历redis内存中数据到临时文件,客户端的写请求同时写入aof_buf缓冲区和aof_rewrite_buf重写缓冲区保证原AOF文件完整以及新AOF文件生成期间的新的数据修改动作不会丢失。 使用新的AOF文件覆盖旧的AOF文件,完成AOF重写。 如图所示 # AOF持久化流程 客户端的请求写命令会被append追加到AOF缓冲区内; AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中

    76610编辑于 2022-07-14
  • 来自专栏weixuqin 的专栏

    redis 学习(18)-- AOF

    AOP 重写实现方式 - AOF 重写配置 AOF配置项 配置 默认值 含义 auto-aof-rewrite-min-size 64MB AOF文件重写需要的尺寸,AOF多大时开启重写 auto-aof-rewrite-percentage 100 AOF文件增长率(当前AOF文件大小超过上一次重写的AOF文件大小的百分之多少才会重写) AOF统计项 统计名 含义 aof_current_size AOF当前尺寸(单位: 字节) aof_base_size AOF上次启动和重写的尺寸(单位:字节) 自动触发时机 当前 AOF 文件大小超过最小重写尺寸 当前 AOF 文件大小超过上次重写完的 AOF 尺寸的百分之多少 yes 在执行重写时不进行AOF操作 auto-aof-rewrite-percentage 100 AOF重写配置(见上文) auto-aof-rewrite-min-size 64MB AOF重写配置 (见上文) AOF 重写原理 AOF重写不会读取老的AOF文件,而是根据当前服务器的状态生成一份新的AOF文件,将老的AOF文件进行替换。

    72720发布于 2019-06-05
  • 来自专栏kafka专栏

    【Redis】Redis AOF持久化

    AOF持久化的实现 ---- AOF 持久化分为 : 命令追加(append)->文件写入->文件同步(sync) 三个步骤 ? 写入AOF文件不就是同步了吗? AOF文件重写 ---- AOF文件经过一段时间之后会越来越大, 所以就需要重写AOF文件来减小文件大小; 实际上,AOF文件重写并不需要对现有的AOF文件进行任何读取、分析或者写入操作;这个功能是通过读取 当前数据库状态来实现的; redis提供了aof_rewrite函数来重写 如果用redis的服务器进程来进行重写,就会影响redis整体的性能; 那么redis实现的方式是 AOF后台重写 AOF redis 创建一个子进程出来专门做AOF重写操作; 怎么解决AOF在重写的时候,又有新的写命令在执行? 当子进程完成AOF重写工作之后,它会向父进程发送一个信号量,父进程在接收到改信号之后,会调用一个信号处理函数,并执行以下操作: 1.将AOF重写缓冲去中的所有内容写入到新的AOF文件中;这是新的AOF

    52030发布于 2021-07-14
  • 来自专栏多线程

    【Redis】Redis AOF持久化

    AOF解决思路 不记录数据,记录操作过程 对所有操作均进行记录,排除丢失数据的风险 AOF(append only file)持久化:不记录数据,只是以独立日志的方式记录每次写命令,重启时再重新执行AOF :0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec :-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 五、AOF工作流程 always:主进程执行 然后用左边子进程写入aof缓存区的数据重写临时aof文件,最终会讲临时aof文件的内容更新到真正的aof文件,然后临时的aof文件就被删除了 六、AOF和RDB的区别 占用空间:  由于很多指令可能只是对某几个数据进行操作 AOF是redis默认的持久化方式,优先级高于RDB,当数据量很大时RDB每存一次都需要消耗一定时间 基于需求选择RDB和AOF 对数据非常敏感,建议使用默认的AOF持久化方案,丢数据更少:AOF持久化策略使用

    54320编辑于 2023-10-24
  • 来自专栏码农架构

    Redis 持久化方式-AOF

    本篇主要梳理AOF持久化方式 AOF的工作原理是以独立日志的方式记录每次写命令, 重启时再重新执行 AOF 文件中的命令达到恢复数据的目的。 重写机制 压缩文件体积 AOF 文件重写是把 Redis 进程内的数据转化为写命令同步到新 AOF 文件的过程. 重写后的AOF文件为什么可以变小? auto-aof-rewrite-min-size: 表示运行 AOF 重写时文件最小体积, 默认为 64MB auto-aof-rewrite-percentage: 代表当前 AOF 文件空间 ( aof_current_size) 和上一次重写后 AOF 文件空间 (aof_base_size) 的比值 自动触发时机 = aof_current_size > auto-aof-rewrite-min-size && (aof_current_size-aof_base_size)/aof_base_size >= auto-aof-rewrite-percentage aof_rewrite_buf: 保存

    59430发布于 2020-12-11
  • 来自专栏星空畅想

    Redis 的 AOF 和 RDB

    always 每个事件循环都要将aof_buf缓冲区中所有内容写入到AOF文件中,并且同步AOF文件 everysec 每个事件循环都要将aof_buf缓冲区中所有内容写入到AOF文件中,并且每隔1s 就要在子线程中对AOF文件进行一次同步 no 每个事件循环都要将aof_buf缓冲区中所有内容写入到AOF文件中,同步时机需要系统控制 总结AOF的写回策略: 配置项 写回时机 优点 缺点 always AOF重写 因为AOF持久化是通过保存被执行的写命令来记录数据库状态,随着AOF文件的内容越来越多,文件的体积也会越来越大;随着AOF文件体积的越来越大,还原的时间也随之加长,为了解决AOF体积膨胀的问题 ,Redis提供了AOF文件重写的功能,通过AOF重写,Redis可以创建一个新的AOF文件来替代现有的AOF文件,同时新的AOF文件通常会比旧的小很多。 ,以及只使用AOF文件导致AOF文件过大的问题,“成年人的世界就是「我全都要」”。

    1.4K10编辑于 2021-12-08
  • 来自专栏波波烤鸭

    Redis持久化之AOF

    AOF 持久化正是利用这个原理来实现数据的持久化与数据的恢复的 开启AOF 在redis中AOF默认是关闭的,我们需要修改配置文件来开启AOF ? 100 当前AOF文件超过上次AOF文件的百分比后才进行持久化操作 auto-aof-rewrite-min-size 64mb 自定执行AOF操作文件最小的大小要达到的大小 关闭快照(RDB)持久化 值得注意的是,进行 AOF 文件重写时,如果原来的 AOF 文件体积已经非常大,那么重写 AOF 并删除旧 AOF 文件的过程将会对 Redis 的性能造成较大的影响。 配置当 AOF 文件需要比旧 AOF 文件增大多少时才进行 AOF 重写,而auto-aof-rewrite-min-size则配置当 AOF 文件需要达到多大体积时才进行 AOF 重写。 AOF 文件使用 Redis 命令追加的形式来构造,因此,即使 Redis 只能向 AOF 文件写入命令的片断,使用 redis-check-aof 工具也很容易修正 AOF 文件。

    1.5K30发布于 2019-04-02
  • 来自专栏软件工程

    Redis持久化之AOF

    AOF(Append-Only-File)持久化:保存写状态 记录下除了查询以外的所有变更数据库状态的指令 以append的形式追加保存到AOF文件中(增量) 解决AOF文件大小不断增大的问题,原理如下 AOF的完成信号,往新AOF同步增量变动 使用新的AOF文件替换掉旧的AOF文件 AOF恢复的过程像是把AOF日志文件里保存的命令重新执行一遍一样 重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式 服务器在AOF功能开启的情况下,会维持以下三个变量: 记录当前AOF文件大小的变量 aof_current_size。 记录最后一次AOF重写之后,AOF文件的大小 aof_rewrite_base_size。 增长百分比变量 aof_rewrite_perc。 ,并且当前AOF文件大小比最后一次AOF重写时的大小要大于指定的百分比,那么触发自动AOF重写。

    36510编辑于 2022-05-13
  • 来自专栏程序员历小冰

    Redis AOF 持久化详解

    其流程如下: 所有的写命令会追加到 AOF 缓冲中。 AOF 缓冲区根据对应的策略向硬盘进行同步操作。 随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。 no:Redis 在每一个事件循环都要将 AOF 缓冲区中的所有内容写入到 AOF 文件。而 AOF 文件的同步由操作系统控制。 为了解决 AOF 文件体积膨胀的问题,Redis 提供了 AOF 文件重写( rewrite) 功能。通过该功能,Redis 可以创建一个新的 AOF 文件来替代现有的 AOF 文件。 新旧两个 AOF 文件所保存的 Redis 状态相同,但是新的 AOF 文件不会包含任何浪费空间的荣誉命令,所以新 AOF 文件的体积通常比旧 AOF 文件的体积要小得很多。 AOF 后台重写 AOF 重写函数会进行大量的写入操作,调用该函数的线程将被长时间阻塞,所以 Redis 在子进程中执行 AOF 重写操作。

    96200发布于 2019-07-30
  • 来自专栏码农沉思录

    Redis AOF 持久化详解

    其流程如下: 所有的写命令会追加到 AOF 缓冲中。 AOF 缓冲区根据对应的策略向硬盘进行同步操作。 随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。 no:Redis 在每一个事件循环都要将 AOF 缓冲区中的所有内容写入到 AOF 文件。而 AOF 文件的同步由操作系统控制。 为了解决 AOF 文件体积膨胀的问题,Redis 提供了 AOF 文件重写( rewrite) 功能。通过该功能,Redis 可以创建一个新的 AOF 文件来替代现有的 AOF 文件。 新旧两个 AOF 文件所保存的 Redis 状态相同,但是新的 AOF 文件不会包含任何浪费空间的荣誉命令,所以新 AOF 文件的体积通常比旧 AOF 文件的体积要小得很多。 ? 当子进程完成 AOF 重写工作之后,它会向父进程发送一个信号,父进程在接收到该信号之后,会调用一个信号处理函数,并执行以下工作: 将 AOF 重写缓冲区中的所有内容写入到新的 AOF 文件中,保证新 AOF

    82830发布于 2019-08-06
  • 来自专栏Laoqi's Linux运维专列

    Redis的持久化-AOF

    AOF设置 AOF文件的位置和RDB文件的位置相同,都是通过dir参数设置,默认的文件名是appendonly.aof,可以通过appendfilename参数来修改。 AOF测试 当客户端向服务器发送一些redis命令时,Redis会将所执行的命令记录到aof文件中,如下所示: image.png 当redis服务器重启后,会将执行该aof文件,达到数据恢复的目的 AOF文件大小为依据。 auto-aof-rewrite-min-size 64mb 限制了允许重写的最小AOF文件大小,通常在AOF文件很小的时候,即使其中有些冗余的命令也是可以忽略的。 AOF 缺点 对同样的数据集,AOF 文件通常要大于等价的 RDB 文件。 AOF 可能比 RDB 慢,这取决于准确的 fsync 策略。

    1K80发布于 2018-05-09
  • 来自专栏XINDOO的专栏

    Redis源码剖析之AOF

    Redis为了弥补这一不足提供了AOFAOF的全称是AppendOnlyFile,源码在aof.c。 源码 AOF的触发 aof如何实现,又是怎么被触发的,让我们详细看下源码。 aof开启了,就会向aof传播该命令。 AOF的优势 AOF是持续性备份,可以尽可能保证数据不丢失。 Redis太大时,Redis可以在后台自动重写AOFAOF文件格式简单,易于解析。 AOF的缺点 对于同一数据集,AOF文件大小通常大于等效的RDB文件。 如果使用fsync策略,AOF可能比RDB慢。

    29110编辑于 2024-08-07
  • 来自专栏玩转JavaEE

    Redis之AOF持久化

    AOF持久化 与快照持久化不同,AOF持久化是将被执行的命令写到aof文件末尾,在恢复时只需要从头到尾执行一遍写命令即可恢复数据,AOF在redis中默认也是没有开启的,需要我们手动开启,开启方式如下: AOF文件的重写与压缩 AOF备份有很多明显的优势,当然也有劣势,那就是文件大小。 100表示当目前aof文件大小超过上一次重写时的aof文件大小的百分之多少时会再次进行重写,如果之前没有重写,则以启动时的aof文件大小为依据,同时还要求AOF文件的大小至少要大于64M(auto-aof-rewrite-min-size AOF文件。 那要不要只使用AOF呢? 作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份), 快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。

    96300发布于 2018-07-31
  • 来自专栏程序员历小冰

    Redis AOF 持久化详解

    其流程如下: 所有的写命令会追加到 AOF 缓冲中。 AOF 缓冲区根据对应的策略向硬盘进行同步操作。 随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。 no:Redis 在每一个事件循环都要将 AOF 缓冲区中的所有内容写入到 AOF 文件。而 AOF 文件的同步由操作系统控制。 为了解决 AOF 文件体积膨胀的问题,Redis 提供了 AOF 文件重写( rewrite) 功能。通过该功能,Redis 可以创建一个新的 AOF 文件来替代现有的 AOF 文件。 新旧两个 AOF 文件所保存的 Redis 状态相同,但是新的 AOF 文件不会包含任何浪费空间的荣誉命令,所以新 AOF 文件的体积通常比旧 AOF 文件的体积要小得很多。 ? 当子进程完成 AOF 重写工作之后,它会向父进程发送一个信号,父进程在接收到该信号之后,会调用一个信号处理函数,并执行以下工作: 将 AOF 重写缓冲区中的所有内容写入到新的 AOF 文件中,保证新 AOF

    49510发布于 2019-12-05
  • 来自专栏蓝天

    REdis AOF文件结构分析

    REdis-5.0之前的AOF文件没有文件头,不管是REdis-5.0之前还是REdis-5.0,它们的AOF文件体内容都如下图所示: ? 从REdis-5.0开始,AOF有文件头,目的是支持同时加载RDB和AOF文件。AOF文件头和RDB文件头基本相同,但RDB文件头多了三个字段。 RDB的文件头和AOF基本相同,但在aof-preamble之前多了如下三项: 1) repl-stream-db 2) repl-id 3) repl-offset AOF文件中并未保存已复制的偏移 但是从REdis-5.0开始,加载AOF文件时,先读AOF文件头,如果发现有文件头(Reading RDB preamble from AOF file...) ,则会先从RDB加载数据,并恢复前面提到的复制偏移(repl-offset)等三项数据,剩余部分再从AOF文件读取(Reading the remaining AOF tail...)。

    1K30发布于 2019-03-20
  • 来自专栏技术知识总结

    Redis的AOF持久化

    介绍 AOF 日志AOF 持久化是通过保存 Redis 服务器所执行的写命令来记录数据库状态。 AOF 文件重写技术是为了解决问题而生的,AOF 文件重写用于减少 AOF 文件的体积, 减少使用 AOF 文件来进行数据还原所需的时间 。 通过该功能, Redis 服务器可以创建一个新的 AOF 文件来替代现有的 AOF 文件, 新旧两个 AOF 文件所保存的数据库状态相同,但新 AOF 文件不会包含任何浪费空间的冗余命令, 所以新 AOF AOF 文件重写的实现原理虽然 Redis 将生成新 AOF 文件替换旧 AOF 文件的功能命名为“AOF 文件重写”,但实际上,AOF 文件重写并不需要对现有的 AOF 文件进行任何读取、分析或者写入操作 最后,服务器用新的 AOF 文件替换旧的 AOF 文件, 以此来完成 AOF 文件重写操作。

    63430编辑于 2022-12-20
领券