Redis-aof持久化

    在Redis的rdb快照持久化,可以让我们每个几分钟将缓存中的数据以快照方式保存到磁盘上进行持久化,这种持久化方式有一个很大的弊端就是在两次持久化之间如果发生了故障,那么这几分钟的数据将会丢失。为了解决这个问题,在Redis2.4版本之后引入了aof持久化方式。并且官方建议我们让这两种持久化方式同时进行以保证持久化工作的效率与安全。

1.注意事项

    强烈建议在配置Redis的时候,一开始就同时配置好rdb持久化与aof持久化的相关配置选项,如果先配置了rdb持久化,在生产环境中使用了一段时间后在配置aof持久化,当redis重启之后,redis优先使用aof文件进行恢复,因为aof持久化是刚刚配置的,aof文件可能为空,这时当你重启redis之后,将给你的redis缓存清空。

2.aof持久化原理

    aof的全称是append of file,顾名思义就是采用追加文件的方式进行持久化,其原理也很简单就是当客户端发送命令给Redis Server主进程后,Redis中会启动一个aof进程将这些命令逐条写入到aof文件中。

3.相关配置

    要使用aof持久化,可以在redis的配置文件中配置如下选项:

    appendfsync:这个参数有三个选项,always、no、everysec。always表示当服务端每接收到一条命令都立即写入到aof文件中,这种方式最安全,但是速度也最慢基本上不会采用这个配置,因为我们使用Redis的很大的一个原因就是因为Redis是基于内存的数据库,如果没执行一条命令都要写磁盘那么就失去了Redis速度快的优势;no表示命令写入到磁盘的时机交给操作系统决定,有操作系统判断命令缓存区的大小,并统一写入。一般操作系统在缓存区大小为几K时写一次磁盘;everysec是默认值,也是比较常用的一种方式,从他的名字就可以看出,这个配置是每间隔1秒钟写一次磁盘。

    appendfilename:aof文件的名字,默认值是appendonly.aof。

    no-appendfsync-on-rewrite:这个参数默认是no,建议改成yes,这个参数的意思是当导出rdb快照的过程中,要不要停止aof写磁盘操作,建议停止,因为rdb写磁盘的时候已经占用了一点的磁盘IO,aof可以在rdb完成之后操作。并且这段时间的命令记录不会丢失,而是继续保存在缓存中,当rdb持久化结束后一次写如到磁盘。

    auto-aof-rewrite-percentage和auto-aof-rewrite-min-size:这两个参数是配合使用的,默认值是100和64mb,这两个参数是什么意思呢?这里有个aof文件重写的概念,上面讲过aof文件里面记录的是客户端发送到redis服务的命令。在高并发情况下aof文件可能会很大,但是有些命令可以合并为一条命令,例如:

    set num 1

    incr num

    incr num

    ......

    如果incr num操作了一百次,最终num在redis中的值就是101,但是aof文件中却记录了101条命令来表示这个值。这时大大的浪费了我们的磁盘空间,并且恢复起来也非常的慢,因为我们要执行101条命令。基于此Redis提供了aof文件重写的机制,上述情况进行重写之后就可以用set num 101这一条命令来表示,从而大大的节省空间。那么什么时候进行aof文件重写操作呢?可以通过以上两个参数配置,auto-aof-rewrite-percentage表示aof文件的增长率超过上次重写的百分之多少时进行重写,默认值是100。也就是说aof文件增长一倍时重写。但是仅仅依靠这一个参数是不够的,因为当aof文件很小时,重写就会很频繁,我们可以设定当aof文件超过多大时才开始进行重写。这就是auto-aof-rewrite-min-size参数的设置,默认值是64mb。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值