3

redis(4)AOF持久化

 2 years ago
source link: https://wakzz.cn/2018/01/26/redis/(4)AOF%E6%8C%81%E4%B9%85%E5%8C%96/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集。

2、AOF持久化机制的优点

  1. AOF可以更好的保护数据不丢失,AOF默认每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据每隔1秒,就执行一次fsync操作,保证os cache中的数据写入磁盘中redis进程挂了,最多丢掉1秒钟的数据;
  2. AOF日志文件以append-only模式写入,所以没有任何磁盘寻址的开销,写入性能非常高,而且文件不容易破损,即使文件尾部破损,也很容易修复;
  3. AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。因为在rewrite log的时候,会对其中的指导进行压缩,创建出一份需要恢复数据的最小日志出来。再创建新日志文件的时候,老的日志文件还是照常写入。当新的merge后的日志文件ready的时候,再交换新老日志文件即可;
  4. AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令删除,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据;

    3、AOF持久化机制的缺点

  5. 对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大;
  6. AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF默认配置每秒fsync一次日志文件;
  7. 使用AOF做数据恢复时,会比较慢,还有做冷备,定期的备份,不太方便,可能要自己手写复杂的脚本去做,做冷备不太合适;

    4、数据恢复顺序

    当redis同时有RDB和AOF两种持久化备份时,redis优先使用AOF进行数据还原。若AOF文件不存在,redis则创建一个新的AOF文件,而不从RDB恢复数据。
    若需要从RDB恢复数据,应:
    1 . 停止redis;
    2 . 修改redis配置文件关闭AOF;
    3 . 拷贝RDB文件到redis目录下;
    4 . 启动redis,确保数据已经恢复;
    5 . 在redis命令行中执行以下命令热修改redis配置开启AOF持久化;
    config set appendonly yes

6 . 此时redis重新生成AOF持久化文件,且AOF和RDB的数据已经同步;
7 . 停止redis,修改redis配置文件打开AOF持久化,启动redis;

############################## APPEND ONLY MODE ###############################

# By default Redis asynchronously dumps the dataset on disk. This mode is
# good enough in many applications, but an issue with the Redis process or
# a power outage may result into a few minutes of writes lost (depending on
# the configured save points).
#
# The Append Only File is an alternative persistence mode that provides
# much better durability. For instance using the default data fsync policy
# (see later in the config file) Redis can lose just one second of writes in a
# dramatic event like a server power outage, or a single write if something
# wrong with the Redis process itself happens, but the operating system is
# still running correctly.
#
# AOF and RDB persistence can be enabled at the same time without problems.
# If the AOF is enabled on startup Redis will load the AOF, that is the file
# with the better durability guarantees.
#
# Please check http://redis.io/topics/persistence for more information.

appendonly no

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"
# The fsync() call tells the Operating System to actually write data on disk
# instead of waiting for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.
#
# The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
#
# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no
  1. appendonly no表示redis默认关闭AOF持久化,通过修改no为yes打开AOF持久化;
  2. appendfsync always/everysec/no表示AOF的持久化频率,always表示redis每变化一个值就进行一次AOF持久化;everysec表示每秒进行一次AOF持久化,也是redis的默认配置;no表示redis不主动进行AOF持久化,完全由系统触发AOF持久化,可控性差;

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK