ITPub博客

首页 > 数据库 > 数据库开发技术 > redis aof重写你了解多少

redis aof重写你了解多少

原创 数据库开发技术 作者:醉鱼Java 时间:2021-11-05 09:07:22 0 删除 编辑

redis aof 重写

背景:

Redis 使用AOF持久化时,如果AOF文件过大,会造成Redis服务重启时加载缓慢,为此Redis有AOF优化,通过阅读本文你可以了解到如何配置Redis 持久化方式为AOF?AOF的触发条件都是有什么?

如何配置Redis 持久化方式为AOF

  • 找到redis.conf,开启AOF持久化配置,默认关闭

    dir /var/lib/redis

    # aof 开关,改为yes 开启aof
    appendonly yes

    # aof 文件名定义,一般加端口
    appendfilename "appendonly-6379.aof"

    # 写入策略,默认everysec,每秒一次,always 对硬盘压力大,no 对硬盘压力小,丢失数据风险最大
    appendfsync everysec

    # 是否在后台写时同步单写,默认为no,设置为no时表示新进程set会被阻塞,yes的时候新进程不会阻塞,等待后台所有执行完成以后在执行这部分set写入aof文件
    no-appendfsync-on-rewrite no

    # auto-aof-rewrite-percentage 是指当前的AOF文件比上次重写的比例
    auto-aof-rewrite-percentage 100

    # aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.
    auto-aof-rewrite-min-size 64mb

    # redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.
    aof-load-truncated yes

  • AOF的触发条件有哪些

    • 手动触发 执行 bgrewriteaof 命令

    • auto-aof-rewrite-min-size 表示运行AOF重写是文件最小的大小。默认64M,小于64M就会不自动重写了。

      auto-aof-rewrite-percentage 表示(aof_current_size- aof_base_size) / aof_base_size 的比值。

      aof文件重写之后当前文件大小增长多少就触发重写

      自动触发时机 :

      aof_current_size>auto-aof-rewrite-min-size

      &&

      (aof_current_size - aof_base_size) / aof_base_size >= auto-aof-rewrite-percentage

测试一下手动触发AOF重写

  • 打开AOF配置之后,重新启动redis

  • 打开一个命令行客户端1,找到redis目录下aof文件,查看文件大小为0

  • 另开一个命令行客户端2,登入redis客户端

  • 客户端2执行set 命令,最后重复对同一个key多次操作

    set k1 v1
    set k2 v2
    set k3 v3
    set k4 v4
    set k5 v5
    set k5 v6
    set k5 v7
    set k5 v8
  • 此时回到客户端1,查看文件大小 255

  • 客户端2执行命令,bgrewriteaof

  • 回到客户端1,查看aof文件大小变为了168

Redis 5.0.8 源码位置

   if (server.aof_state == AOF_ON &&
server.rdb_child_pid == -1 &&
server.aof_child_pid == -1 &&
server.aof_rewrite_perc &&
server.aof_current_size > server.aof_rewrite_min_size)


原文作者:醉鱼Java;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-12-08

  • 博文量
    79
  • 访问量
    36660