大数据之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文件,载入较新的那个。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值