Redis的AOF持久化测试


AOF文件:
上面已经多次讲过,RDB的快照定时dump机制无法保证很好的数据持久性。如果我们的应用确实非常关注此点,我们可以考虑使用Redis中的AOF机制。对于Redis服务器而言,其缺省的机制是RDB,如果需要使用AOF,则需要修改配置文件中的以下条目:
将appendonly no改为appendonly yes
从现在起,Redis在每一次接收到数据修改的命令之后,都会将其追加到AOF文件中。在Redis下一次重新启动时,需要加载AOF文件中的信息来构建最新的数据到内存中。

redis.conf:(修改配置的配置文件)
APPEND ONLY MODE:
appendonly no --改为yes,redis启动时会加载AOF

appendfilename "appendonly.aof" --aof文件的名称,默认不变即可

#appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no #从不同步。高效但是数据不会被持久化。

no-appendfsync-on-rewrite no --在默认情况下,当aof进行重写时,aof的同步信息不是关闭的。在这种情况下,子进程rewrite(bgrewriteaof命令可进行aof文件异步重写)在写磁盘,在rewrite的过程中 子进程对主进程造成了磁盘阻塞(disk io冲突),导致了报警信息的产生。
--但是这个参数修改成 yes之后 ,又会有安全上的问题。因为这时候并没有执行磁盘操作,只是将命令写入了缓冲区。当rewrite的过程中 要是redis服务down掉的话 丢失的数据 就不是之前appendfsync 定下的策略。而是整个 rewrite 过程中的所有数据。

auto-aof-rewrite-percentage 100 --重启后,如果aof文件当前大小比重启时增长了百分之100就触发重写aof,做整合

auto-aof-rewrite-min-size 64mb --重启后,如果aof文件大小达到了64m就触发重写,做整合

aof-load-truncated yes --如果aof文件是被清空了的,重启时是否重载。有时候会有异常被清空,但是如果人家真的是想清空的,那也是得装载,所以默认为yes就好。



开始测试:
第一步:按照上面把配置文件redis.conf修改好,然后启动redis服务和客户端(分两个终端)
cd /usr/local/redis
./bin/redis-server redis.conf

cd/usr/local/redis
./bin/redis-cli

第二步:在客户端新建一个key,然后新开终端进/var/redis里面看是否产生了aof文件,产生了即AOF持久化生效
set strkey aa
可以看到命令已经存进来了。第一个命令是选择数据库,默认为数据库0。第二条命令就是set strkey aa,其中 *3 表示的是命令由三部分组成。

第三步:重启服务器,看key是否还存在
keys *
第四步:设置一个String类型的key,值为2,然后重复incr key命令,看aof文件内容。
命令如下:
set key1 1
incr key
incr key
..
..
aof内容如下:

可以发现,重复的命令会重复地写进aof文件里面,此时如果我们进行重写,结果会编程什么样呢?

第五步:在客户端执行 bgrewriteaof 命令,可进行后台进程重写aof。重写后看看aof文件内容。
可发现:最后省去所有命令,将key1的最后值赋给key1,即命令set key1 最后值

所以:上面的关于重写的命令auto-aof-rewrite-percentage,auto-aof-rewrite-min-size都是问了文件达到了一定的大小就进行重写, 就是对aof文件进行整合:将多余的命令都省去,直接改为赋值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisAOF持久化是指将Redis的每次写操作记录下来,以日志的形式保存到磁盘上,从而保证数据的持久性和完整性。具体来说,Redis AOF持久化有两种配置参数:appendfsync always和appendfsync no。 当appendfsync参数设置为always时,每次写入都会立刻记录到AOF日志中,保证了数据的完整性,但会对性能产生一定影响。 而当appendfsync参数设置为no时,Redis不会主动进行同步,而是将同步时机交给操作系统,由操作系统来决定何时将数据写入磁盘。这种方式相对于always来说,性能更好,但数据的完整性可能会受到一定影响。 总的来说,AOF持久化机制更稳健,丢失数据的概率较低,并且可以通过AOF日志文件来处理误操作。然而,相比于RDB持久化方式,AOF占用更多的磁盘空间,恢复备份的速度也较慢。此外,如果每次读写都进行同步,可能会对性能造成一定的压力。同时也需要注意,AOF持久化机制存在个别Bug,可能导致无法正确恢复数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis持久化AOF(详解)](https://blog.csdn.net/weixin_45737330/article/details/127248907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值