AOF 以独立日志的方式记录每次写命令(读操作不记录),重启时再重新执行AOF文件中的命令来恢复数据。AOF会先把命令追加在AOF缓冲区,然后根据对应策略写入硬盘(appendfsync),它只许追加文件但不可以改写文件
在redis.conf⽂件中appendfsync参数用来设置AOF文件被写入的策略:
always:表示只要缓冲区中数据发生更改,则就将该数据写入到AOF文件中,效率很低,不建议配置
everysec:每秒执行一次把缓冲区中数据写入AOF文件中(Redis默认)。如果一秒内出现宕机,可能会导致 丢失这一秒数据。通常选择 everysec ,兼顾安全性和效率
no,不做任何策略配置,将策略的配置交给操作系统,一般操作系统是等待缓冲区被占完之后,将数据写入AOF文件中。速度最快,但是不太安全
开启AOF: vim /opt/redis-5.0.4/redis.conf
将699行appendonly的no改为yes
重新启动Redis服务: redis-server /opt/redis-5.0.4/redis.conf
/usr/local/bin/redis-cli
随便创建键后然后清空库,之后退出
[root@localhost redis-5.0.4]# redis-server /opt/redis-5.0.4/redis.conf 15489:C 01 Jul 2023 19:05:32.380 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 15489:C 01 Jul 2023 19:05:32.380 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=15489, just started 15489:C 01 Jul 2023 19:05:32.380 # Configuration loaded [root@localhost redis-5.0.4]# /usr/local/bin/redis-cli 127.0.0.1:6379> 127.0.0.1:6379> set k 1 OK 127.0.0.1:6379> set k 2 OK 127.0.0.1:6379> set k3 413 OK 127.0.0.1:6379> set k5 111 OK 127.0.0.1:6379> set k6 123 OK 127.0.0.1:6379> flushall OK 127.0.0.1:6379> shutdown not connected> exit
切换到 /usr/local/bin目录下: cd /usr/local/bin
可以看到自动生成了appendonly.aof文件夹,然后编辑该文件夹将最后情况库的命令删除重启redis后查看就可以看到我们刚刚随便写的数据都在
AOF优缺点
优点:
1.安全性相对RDB方式高很多
2.AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕 机等等)未执行完整的写入命令,你也可使用redis-check-aof工具修复这些问题
3.AOF文件的格式可读性较强,这也为使用者提供了更灵活的处理方式。例如,如果我们不小心错用了FLUSHALL命 令,在重写还没进行时,我们可以手工将最后的FLUSHALL命令去掉,然后再使用AOF来恢复数据
缺点:
1.对于相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积
2.效率相对RDB方式低很多
3.根据所使用的fsync策略,AOF的速度可能会慢于RDB。 在一般情况下,每秒fsync的性能依然非常高,而关闭fsync可以让AOF的速度和RDB一样快, 即使在高负荷之下也是如此。不过在处理巨大的写入载入时,RDB可以提供更有保证的最大延迟时间(latency)