redis -- AOF

什么是 AOF

通过日志方式将redis中的写命令进行日志记录,保存在硬盘文件中。

日志记录的实质是将写命令写在硬盘的缓冲区中,再根据相关策略把数据刷新到磁盘中。

当redis服务器启动时候,执行硬盘中的日志文件以恢复redis中的数据。

AOF 运行原理 - 创建

AOF 运行原理 - 恢复

AOF 的三种策略

1. always

含义:执行每条写命令都会将写命令写到磁盘中

2. everysec

含义:每秒将数据从缓冲区刷到磁盘中,可能会丢失一秒的数据(redis 默认使用该策略)

3. no

含义:写命令何时刷新的磁盘中,由操作系统来决定

AOF 重写

注意这里的重写并不是说将 redis 命令重新抽象成新的 redis 命令,再写入 AOF 文件,而是执行 redis 命令后将内存中的数据进行回溯,重写成 AOF 文件。

1. 重写的作用
  • 减少磁盘占用
  • 加速AOF恢复速度
    • 例如一万次incr key 可以重写为 set key 10000
2. AOF 重写实现方式 - bgrewriteaof

客户端发送出一条bgrewriteaof命令后,redis会fork一个子进程完成AOF重写操作逻辑。

3. 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 尺寸的百分之多少(auto-aof-rewrite-percentage)
aof_current_size > auto-aof-rewrite-min-size
(aof_current_size - aof_base_size) / aof_base_size > auto-aof-rewrite-percentage

AOF 相关配置

配置项 最佳取值 含义
appendonly yes 开启AOF
appendfilename aof-${port}.aof AOF文件名
appendfsync everysec AOF策略
dir /redisDataPath AOF文件所在目录
no-appendfsync-no-rewrite yes 在执行重写时不进行AOF操作
auto-aof-rewrite-percentage 100 AOF重写配置(见上文)
auto-aof-rewrite-min-size 64MB AOF重写配置(见上文)

AOF 重写原理

AOF重写不会读取老的AOF文件,而是根据当前服务器的状态生成一份新的AOF文件,将老的AOF文件进行替换。

AOF 重写流程

演示

redis 支持动态配置,我们开启 AOF,其他配置保持不变。

conf set appendonly yes

我们添加几个数据:

在 /opt/soft/redis/data/ 目录下查看,可以看到,AOF 文件已经生成了,使用 more 命令查看 aof 文件:

看得不太清楚,我们用 head 命令打印 aof 文件头部信息:

使用重写命令:

我们使用 dbszie 重新查看一下数据大小,可以看到文件非常小,只有三个 key:

打印一下重写后的 appendonly.aof :

可以看到重写后的命令变成了:

seletc 0
set counter 2
set counter redis
rpush list a b c

redis 学习(18)-- AOF的更多相关文章

  1. Redis学习——Redis持久化之AOF备份方式保存数据

    新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...

  2. Redis学习笔记六:持久化实验(AOF,RDB)

    作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...

  3. 峰Redis学习(8)Redis 持久化AOF方式

    第三节:Redis 的持久化之AOF 方式 AOF方式:将以日志,记录每一个操作   优势:安全性相对RDB方式高很多: 劣势:效率相对RDB方式低很多: 1)AOF方式需要配置: # Please ...

  4. 【Redis】Redis学习(七) Redis 持久化之RDB和AOF

    Redis 持久化提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF ...

  5. redis学习(四)redis持久化之RDB、AOF

    redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失.为了解决这个问题,re ...

  6. Redis 学习笔记(四)RDB 和 AOF 持久化机制

    一.Redis 持久化简介 Redis 的持久化功能是区别于 Memcached 显著特性,数据持久化可以保证系统在发生宕机和重启后数据不会丢失,对于 redis 这种存储在内存中的数据库显得尤为重要 ...

  7. Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  8. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  9. Redis学习手册——转载

    转载出处:http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html 为什么自己当初要选择Redis作为数据存储解决方案中 ...

  10. Redis学习手册

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

随机推荐

  1. 5.rabbitmq--通配符模式Topics

    rabbitmq--通配符模式Topics topic模式也称为主题模式,其实他相对于routing模式最大的好处就是他多了一种匹配模式的路由,怎么理解匹配呢,其实就相当于我们之前正则的.*这种,不过 ...

  2. 打印li索引值

    <ul> <li>这是第一条alert(0)</li> <li>这是第二条alert(1)</li> <li>这是第三条aler ...

  3. Qt应用Redis实现消息队列

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liulihuo_gyh/article/details/78425763 类似BS模式,客户端发 ...

  4. mysql数据库引擎——MyISAM,InnoDB

    作为一个java web开发人员,对于mysql数据库掌握到具体比较这两类引擎的差异也蛮拼的,下面就介绍一下我在工作中积累的对这两类引擎的理解. MyISAM: 如果不更改mysql配置文件(my.i ...

  5. Docker-----关于dockerfile

    docker build参数说明 --no-cache :创建镜像的过程不使用缓存: --force-rm :设置镜像过程中删除中间容器: --network=host:容器会使用宿主机的网络,容器与 ...

  6. [转]MySQL查询语句执行过程详解

    Mysql查询语句执行原理 数据库查询语句如何执行?语法分析:首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树.语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是 ...

  7. Camera 录制视频的实现

    使用 Camera 录制视频, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.RECORD_AUDIO android.perm ...

  8. HmacSha1加密-java

    package com.test; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache ...

  9. AngularJS ng-disabled在a内无效

    在AngularJS中,对a添加ng-disabled,在disabled情况下,虽显示了不可用的样式,但点击了依旧能触发绑定在a上的ng-click事件. 解决方式:将a改为button.

  10. 自己的框架引入smarty的问题

    这段时间自己学着写PHP的MVC框架,想把Smarty 作为view类加载, 可是自动加载它的时候就出错. 无论改文件名,还是改变路径,都无法解决问题, 我搜索一下相关问题,发现是自动加载Smarty ...