首页 > 数据库 >Redis持久化——AOF

Redis持久化——AOF

时间:2023-06-04 20:11:48浏览次数:40  
标签:AOF 持久 文件 Redis redis 日志 重写

AOF(Append Only File)

以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读指令不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。【默认不开启】

AOF和RDB同时开启,系统默认读取AOF的数据。

 

AOF持久化流程

(1)客户端的请求写命令会被append追加到AOF缓冲区内

(2) AOF缓冲区根据AOF持久化策略[always、everysec、no]将操作sync同步到磁盘的AOF文件中

(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量

(4)Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的

 

AOF备份恢复:

同rdb一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载

异常恢复:

修改默认的appendonly no改为yes

如遇到AOF文件损坏,通过/usr/local/bin/redis-check-aof --fix appendonly.aof进行恢复

备份写坏的AOF文件

恢复:重启redis服务,然后重新加载

 

AOF同步频率设置

appendfsync always:始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性较好

appendfsync everysec:每秒记入日志一次,如果宕机,本秒的数据可能丢失

appendsync no:redis不主动进行同步,把同步时机交给操作系统

 

Rewrite压缩

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof

AOF文件持续增长且过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename), 把rdb的快照,以二进制的形式附在新的aof头部,作为已有的历史数据,替换掉原来的流水账操作

 

优点:

备份机制更加稳健,丢失数据概率更低

可读的日志文件,通过操作AOF文件,可以处理误操作,aof文件损坏可以修复

缺点:

记录数据和操作,比起rdb占用更多的磁盘空间,

恢复速度要慢,

每次读写都同步的话,有一定的性能压力,

存在个别Bug,造成恢复不能。

标签:AOF,持久,文件,Redis,redis,日志,重写
From: https://www.cnblogs.com/fxzm/p/17456215.html

相关文章

  • Redis持久化——RDB
    RDB(RedisDataBase)在指定的时间间隔内将内存的数据集快照(当前某点的数据snapshot)写入磁盘,它恢复时是将快照文件直接读到内存里【默认开启】备份如何执行:Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件【保证数据的一致性和完整性】中,待持久化过......
  • Redis主从复制
    主从复制简介主从复制即将master中的数据即时、有效的复制到slave中。。特征:一个master可以拥有多个slave,一个slave只对应一个master职责:master写数据执行写操作时,将出现变化的数据自动同步到slave读数据(可忽略)slave读数据写数据(禁止)......
  • 基于2.8版本redis配置文件中文解释
        在Redis中直接启动redis-server服务时,采用的是默认的配置文件。采用redis-server xxx.conf这样的方式可以按照指定的配置文件来运行Redis服务。下面是Redis2.8.9的配置文件各项的中文解释。1#daemonizeno默认情况下,redis不是在后台运行的,如果需要在后台运......
  • Redis事务-秒杀并发模拟
    使用工具ab模拟测试:yuminstallhttpd-toolsab--help:使用信息ab-n1000-c100http://localhost8080/SecKill:一个1000请求中有100个并发操作vimpostfile模拟表单提交参数,以&符号结尾;存放当前目录,内容:prodid=0101&ab-n1000-c100-p~/postfile-T application/x-www......
  • Docker安装Java, Apache, Redis, Tomcat, Postgresql, SSH
    [color=red]centos安装Supervisor[/color][url]http://www.alphadevx.com/a/455-Installing-Supervisor-and-Superlance-on-CentOS[/url]网络设定[b][color=darkblue]#创建网络brctladdbrbr0iplinksetdevbr0upipaddradd192.168.2.1/24devbr0#创建容器#......
  • 踩坑|以为是Redis缓存没想到却是Spring事务!
    前言  最近碰到了一个Bug,折腾了我好几天。并且这个Bug不是必现的,出现的概率比较低。一开始我以为是旧数据的问题,就让测试重新生成了一下数据,重新测试。由于后面几轮测试均未出现,我也就没太在意。  可惜好景不长,测试反馈上次的问题又出现了。于是我立马着手排查,根据日志的表......
  • Redis(二) -- 练习
    模拟手机验证码需求:使用redis模拟手机验证码发送,验证码有效期60s,验证验证码输入不能超过3次,超过3次今天就没机会了//验证手机号/***判断字符串是否符合手机号码格式*移动号段:134135136137138139147148150151152157158159165172178182183184187......
  • Redis
    关系型数据库(RMDBS)如果数据库中表与表之间存在某种关联的内在关系,我们就称这种数据库为关系型数据库。比如:Mysql/MariaDB、postgreSQL、Oracle、SQLServer、DB2、Access、SQLlite3特点:全部使用SQL(结构化查询语言)进行数据库操作。都存在主外键关系等关系特征。大部分都支持......
  • 2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline?
    2023-06-03:redis中pipeline有什么好处,为什么要用pipeline?答案2023-06-03:Redis客户端执行一条命令通常包括以下四个阶段:1.发送命令:客户端将要执行的命令发送到Redis服务器。2.命令排队:Redis服务器将收到的命令放入队列中,按照先进先出(FIFO)的原则等待执行。3.命令执行:当Redis服务器轮......
  • 2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline?
    2023-06-03:redis中pipeline有什么好处,为什么要用pipeline?答案2023-06-03:Redis客户端执行一条命令通常包括以下四个阶段:1.发送命令:客户端将要执行的命令发送到Redis服务器。2.命令排队:Redis服务器将收到的命令放入队列中,按照先进先出(FIFO)的原则等待执行。3.命令执行:当Redis服......