大数据之Redis:AOF之Rewrite

Posted 浊酒南街

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之Redis:AOF之Rewrite相关的知识,希望对你有一定的参考价值。

1、Rewrite

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

2、Redis如何实现重写?

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

3、何时重写?

重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定Redis要满足一定条件才会进行重写。


系统载入时或者上次重写完毕时,Redis会记录此时AOF大小,设为base_size,如果Redis的AOF当前大小>= base_size +base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写。

4、AOF的优点

备份机制更稳健,丢失数据概率更低。
可读的日志文本,通过操作AOF稳健,可以处理误操作。

5、AOF的缺点

比起RDB占用更多的磁盘空间
恢复备份速度要慢。
每次读写都同步的话,有一定的性能压力
存在个别Bug,造成奴不能恢复

6、用哪个好

官方推荐两个都启用(会先载入AOF文件回复数据)
如果对数据不敏感,可以选单独用RDB
不建议单独用 AOF,因为可能会出现Bug
如果只是做纯内存缓存,可以都不用

7、性能建议

如果备份方式同时存在,因为RDB文件只用作后备用途,建议只在Slave 上持久化RDB文件,而且只要15分钟各份次就够了, 只保留save 900 1这条规则,

如果Enalbe AOF,好处是即使在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只需要load自己的AOF文件就可以了。但是有代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘足够大,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,如果项目中大量使用到了redis,可以设到3G以上,默认超过原大小100%大小时重写可以改到适当的数值。

如果不Enable AOF,仅靠Master-Slave Replication 实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动.代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比較两个Master/Slave中的RDB文件,载入较新的那个。

以上是关于大数据之Redis:AOF之Rewrite的主要内容,如果未能解决你的问题,请参考以下文章

Redis之AOF重写及其实现原理

redis源码阅读-持久化之aof详解

redis持久化之AOF

redis源码阅读-持久化之aof与aof重写详解

## redis之aof日志持久化

Redis===》数据类型之列表有序无序,常用命令,RDBAOFRDB+AOF