Redis持久化

Redis持久化方式

redis有rdb和aof两种方式,如果没有设置持久化方式,数据就只在内存中,redis重启后就全部丢失了

rdb

不定期的异步方式保存到磁盘上:半持久化方式
是将redis在内存中的数据定时dump到硬盘上,实现数据持久化
在规定的时间间隔内将内存中的数据集快照写入磁盘,实际操作是fork一个子进程,先将数据集写入到临时文件中,写入成功后再替换之前的文件,再用二进制压缩存储,此操作是一种间隔存储,类似于快照的一种方式

aof

把每一次变化都写入到append only file中 全持久化方式
将redis操作日志以追加的形式写入到文件中,记录的是操作记录(查询操作不记录)

Redis中提供了三种同步策略:
每秒同步、 每修改同步、 不同步
每秒执行一次同步、 每次命令都同步、 由OS决定什么时候同步
优点:不丢数据、每秒一次fsync、不用管
缺点:IO开销大、丢1s数据、不可控
事实上,每秒同步也是异步完成的,其效率也是非常高的,缺点是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言

二者的优缺点对比:

rdb的优势:

整个数据库只有一个文件(dump.rdb),很简单,且出现灾难性故障后恢复较容易(可以轻易的将一个单独的压缩文件转义到其他存储介质上去),且极大的减少了IO,只需要fork一个子进程,然后由子进程完成持久化工作,当数据集很大时,rdb方式启动效率和IO消耗都有很大的优势

rdb缺点:

因为是隔一段时间保存一次,所有对于不能容忍丢失数据的场景是不能接受的,因为RDB是通过fork子进程来协助完成数据持久化工作的当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟

aof的优势:

数据安全性更高,即使出现宕机,也不会破坏已经日志文件中已经存在的内容。且aof文件中格式更清洗,更易于理解(其记录了所有的修改操作)

aof的缺点:

数据量级相同,aof的文件要更大,所以恢复速度会慢一些,且根据同步策略的不同,aof在运行效率上会慢于rdb

当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整
怎样取舍:最好两种都用啦
看是否能接受数据丢失吧,能承受一定的数据丢失,rdb方式是比较好的选择

定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外,使用RDB还可以避免AOF程序的bug

adb性能好,但可能丢数据,aof更安全、数据更完整,两个都配置了优先加载aof

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值