说说redis持久化的两种机制:RDB和AOF

前言

redis有两种持久化机制,分别是AOF和RDB,现在就来说说两者的特点

RDB的原理

两个关键点:fork 和 write
fork:redis会单独创建(fork)一个和原进程一模一样的子进程来进行持久化。
write:这个进程会先将数据写入一个临时文件里,待持久化结束了再用这个文件替换上次持久化的文件

RDB什么时候触发呢

1:shutdown的时候,就是正常退出redis
2:redis.conf配置文件默认的快照配置,如下

save 900 1
save 300 10
save 60 10000

900 1 表示900秒内如果有1个key发生了变化,那么触发RDB。300 10以此类推。这个是可以自己改的
3:save和bgsave命令触发。
注意:
save是主进程进行持久化,所以其他任务会阻塞
bgsave是开启动个新进程进行持久化
4:flushall命令
这个命令过后redis就被清空了,所以没什么意义

RDB其他配置

dump.rdb是RDB机制持久化产生的文件,默认是这个名字,可以更改,配置如下

dbfilename dump.rdb

dump.rdb默认生成在执行redis-server命令时的位置。如果想要固定生成在一个位置,用绝对路径,配置如下:

dir  ./

AOF的原理

AOF是根据操作命令的历史日志进行持久化,redis开启时,会根据AOF持久化生成的文件里的内容,依次执行,恢复数据。AOF的出现是为了解决RDB出现的部分数据不一致的问题。

AOF的配置

需要在配置里将AOF开启,配置如下

appendonly yes

默认文件名appendonly.aof,当然也能进行更改,配置如下

appendfilename    "appendonly.aof"

触发机制

#appendfsync always
appendfsync everysec
#appendfsync no

always:每个数据一有变更就同步到磁盘。(慢,但是安全)
no:不同步到磁盘,由操作系统自行同步(性能最好)
everysec(默认):每隔一秒同步到到磁盘

always和no都太极端,everysec是redis官方推荐的配置。在everysec的配置下,意味着最多丢失1秒的数据

AOF重写

aof持久化文件appendonly.aof会随着时间的推移越来越大,可能导致服务器磁盘都装不下。这时候需要进行重写。AOF重写就是对持久化文件进行瘦身。
重写原理:把多个命令合成一个。比如10次的i++,直接写成i=10。
aof重写需要fork一个子进程进行重写

AOF重写触发

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

auto-aof-rewrite-min-size:第一次触发重写的文件大小
默认64mb,表示当aof文件大于64mb触发重写。一般都要设置为5G,6G这样级别的大小

auto-aof-rewrite-percentag:文件大小增长率大于这个配置进行重写
默认100%。指的是第一次触发重写后,假如将64mb缩减为40mb,那么下次触发重写的大小是40+40=80mb。假如到了80mb再触发重写缩减为60mb,那么再下次触发的大小是60+60=120mb。
如果是80%,假设第一次重写64mb变为40mb,下一次是40+40*0.8 = 72mb时进行重写

结尾

如今的redis都是AOF和RDB同时开启。两种机制相辅相成。
RDB是直接将数据备份下来,所以相同数据量下文件大小比aof小,但是每次持久化都要开启一个和当前进程一摸一样的子进程来操作,开销比较大,不适合较高频率触发,因此它的数据一致性不能很好的保证,最多丢失两次持久化间隔时间的数据。
AOF呢,则是根据reids的历史操作命令进行持久化,通过配置appendfsync为everysec,使得aof每隔一秒进行磁盘持久化,在满足不错的一致性情况下(1秒内的数据丢失),还能有很好的性能,但是随着时间的推移,aof文件会越来越大,所以出现了aof的重写。aof的重写需要启动一个子进程执行,频繁的重写也会对redis性能造成极大的影响。所以重写的参数配置要合理,太小的话容易多次触发重写。
其实在redis的启动机制里,如果AOF开启且AOF文件存在的话,是默认优先加载AOF。只有AOF加载失败才去加载RDB文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值