之前在安装和部署Redis的时候总会看见AOF持久化这个功能选项,不知道是做什么的,今天有时间就简单聊聊,要弄清楚Redis的AOF持久化功能是做什么的,以及是否应该开启它。然后还要了解appendfsync的选项always、everysec和no之间的区别以及如何选择。首先,Redis有两种持久化方式,对吧?一种是RDB,另一种是AOF。RDB是快照,定时保存数据,而AOF可能记录每个写操作,这样恢复的时候可以重放这些操作。这样在发生故障时,AOF可能提供更好的数据持久性,因为每次操作都记录下来了,不像RDB可能会丢失最后一次快照之后的数据。那AOF具体是怎么工作的呢?
AOF持久化
全称是Append Only File,所以应该是追加写入的方式。每次执行一个写命令,就会把这个命令追加到AOF文件的末尾。这样当Redis重启时,可以通过重新执行AOF文件中的命令来恢复数据。这样的话,AOF文件会越来越大,可能需要进行压缩或者重写,比如AOF重写机制,这个我记得是Redis通过fork一个子进程来重写AOF,生成一个更紧凑的文件,只保留恢复当前数据集所需的最小命令集合。
针对AOF是啥?举个栗子
想象你有一个记账本,每次花钱都记一笔(比如“买奶茶-18元”)。AOF就像这个记账本,专门记录Redis收到的所有写操作(比如新增、修改、删除数据)。
Redis重启时,会翻出这个记账本,把上面的操作重新做一遍,数据就恢复啦!
(而另一种RDB持久化,相当于定时拍张数据“照片”,可能丢数据)
是否开启AOF
默认没开! Redis默认用RDB快照(类似定时拍照),但AOF更安全。开不开取决于你的需求:
开AOF:
-
适合不能丢数据的场景(比如订单、余额)。
-
代价:AOF文件体积大,恢复数据慢一丢丢。
不开AOF:
-
适合能容忍丢数据的场景(比如缓存、点赞数)。
-
代价:服务器突然宕机,可能丢几分钟的数据。
普通建议:重要数据可以同时开启RDB和AOF(Redis 4.0+支持混合持久化),既安全又能快速恢复。
appendfsync三种模式
这个配置相当于问你:每次记账后,多久把记账本存到硬盘?
通俗解释:
always模式:
-
适合:钱不能丢(比如银行转账)。
-
缺点:每操作一次就存盘,频繁存盘会卡。
everysec模式(推荐):
-
适合:大部分场景(比如电商订单)。
-
缺点:极端情况可能丢1秒数据(但概率极低)。
no模式:
-
适合:数据丢了无所谓(比如短视频点赞数)。
-
缺点:服务器宕机可能丢几十秒数据。
怎么选?
保命配置:appendonly yes + appendfsync everysec(90%场景选它)
超级怕丢数据:appendfsync always(但准备好承受性能损耗)
纯当缓存用:直接关AOF,用默认RDB就行!
口诀:AOF像记账本,always最稳但慢,everysec省心够用,no模式心要大!
评论(0)