【Redis学习】两种持久化方式

Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。

简单介绍

RDB:就是在不同的时间点,将目前的数据生成快照然后存储到磁盘上。
AOF:将Redis执行过的所有写指令记录下来存放到磁盘中,在下次redis重新启动时, 把这些写指令从前到后再重新执行一遍,就可以实现数据恢复了。

RDB和AOF这两种方式是可以同时使用的,在这种情况下,Redis重启后,会优先使用AOF方式来进行数据的恢复,因为AOF方式恢复的数据完整性要比RDB高。

RDB

Redis在进行数据持久化的过程中,会单独创建一个fork子进程来进行工作(主进程不会进行任何io操作,保证了Redis的高性能),先将数据写入到一个临时文件中,等到持久化过程结束了,才会用这个临时文件替换上次持久化好的文件。通过这种方式,可以保证快照文件总是完整的。

如何使用: 执行SAVE或者BGSAVE指令即可

RDB模式存储的是Redis某一时刻的数据状态,所以对于数据完整性方面存在缺陷。例如每5分钟进行一次RDB,当发生故障进行恢复时,会丢掉将近5分钟的数据。

如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

AOF

AOF记录的是对Redis的写指令。

如何打开: 通过配置redis.conf中的appendonly yes就可以打开AOF功能。

默认的AOF持久化策略是每秒钟fsync一次(fsync是指把缓存中的写指令记录到磁盘中),这样,当发生故障时,仅仅只会丢失1秒钟的数据。

AOF模式采取的是追加的方式,所以如果不对文件进行处理的话,会导致文件越来越大,所以Redis提供了AOF文件重写的机制。当AOF文件超过设定的阈值后,就会对其进行一次重写,文件会得到很大的压缩,例如执行了100次INCR指令(将数值加一),重写之后只记录一条SET指令就可以了。

重写过程
Redis创建一个fork子进程来读取现有的AOF文件对其进行分析压缩并写入到一个临时文件
同时,Redis会把新的写指令累积到内存缓冲区中并且写入到原有的AOF文件中
当fork子进程完成重写工作之后会发给父进程一个信号
父进程将内存缓冲区中的写指令追加到临时文件中
追加结束后,用新的AOF文件替换旧的AOF文件

AOF的一个优点:如果不小心错误的执行了一条指令,在AOF文件重写之前,可以通过暂停Redis然后对AOF文件进行编辑,删除掉错误执行的指令,再重启Redis就可以恢复到之前的状态了。

缺点:AOF文件要比RDB文件占用的空间大,并且AOF方式的恢复速度也要慢于RDB方式。

如何选择

如何选择RDB和AOF,官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值