Redis持久化--AOF

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/baidu_32045201/article/details/98626258

Redis的数据持久化方式有 RDB 和 AOF 两种,这篇文章将会讲解 AOF

AOF是什么

AOF(Append Only File)以日志形式记录服务器收到的每一个写操作

AOF怎么进行持久化

使用AOF默认会在当前目录下生成一个 appendonly.aof 日志文件

在恢复数据时,AOF会将appendonly.aof中记录下的所有写操作重新按顺序执行一遍

以下是appendonly.aof文件的示例片段

*2
$6
SELECT
$1
0
*3
$3
SET
$2
id
$3
123
*3
$3
SET
$4
name
$6
DangHT
*3
$3
SET
$4
from
$3
NPU

如果一不小心执行了 FLUSHALL 命令清除了数据集,若想要恢复,可以打开aof文件删除其中的FLUSHALL命令记录即可

AOF有三种触发写入磁盘操作的策略:

  • always:同步持久化,每次发生数据变更会被立即记录到磁盘,性能较差但是数据完整性较好
  • everysec(default):默认设置,异步操作,每秒记录,如果有一秒宕机,会丢失一秒内的数据
  • no:不主动触发,由操作系统自行触发

AOF与RDB能共存吗

当然可以,然而Redis再数据恢复时会优先去查看AOF文件

当共存时,若AOF文件出错,则Redis服务启动时会报错

官方提供了redis-check-aof命令来自动修复AOF文件(对应的也有redis-check-rdb)

AOF重写(rewrite)机制

AOF采用文件追加方式记录写操作日志,为避免文件越来越大,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。使用bgrewriteaof执行重写操作

扫描二维码关注公众号,回复: 7659354 查看本文章

AOF文件持续增长而过大时,会fork出一条新的子进程来将文件重写(与RDB快照类似,也是先写临时文件最后再rename覆盖),遍历新进程的内存中的数据,每条记录有一条SET语句。重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件。

触发机制:Redis会记录上一次重写时的AOF大小,默认设置是当AOF文件大小是上一次rewrite后大小的一倍且文件大于64M时触发

# Automatic rewrite of the append only file.
# Redis is able to automatically rewrite the log file implicitly calling
# BGREWRITEAOF when the AOF log size grows by the specified percentage.
#
# This is how it works: Redis remembers the size of the AOF file after the
# latest rewrite (if no rewrite has happened since the restart, the size of
# the AOF at startup is used).
#
# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.
#
# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

AOF的优势

  • AOF具有很好的耐用性,支持多种的文件同步策略
  • AOF是一个仅追加记录的日志文件,如果出现错误或断电都不会影响它对数据的恢复,即使处理命令未读取完整的情况,也可以使用redis-check-aof工具对其进行修复
  • 当Redis数据太大时,Redis能够在后台自动重写AOF。而且重写操作是安全的
  • AOF记录了Redis的写操作指令,便于阅读和理解其意义,以方便修改

AOF的劣势

  • 对于相同的数据集来说,AOF文件的体积通常要大于RDB文件的体积
  • 数据恢复时,AOF的恢复速度会慢于RDB

猜你喜欢

转载自blog.csdn.net/baidu_32045201/article/details/98626258
今日推荐