redis的RDB和AOF持久化原理与数据恢复

redis的两种持久化方式

save
阻塞当前进程,直到持久化完成。如果内存中需要持久化的实例较多,会严重影响redis性能

bgsave
save的改进版,主进程fork一个子进程,子进程在后台做持久化工作,期间不影响主进程的正常运行

RDB持久化原理

  • RDB是redis默认的持久化方式,redis会按照持久化策略,隔一段时间保存一份内存的数据快照到dump.rdb文件。该文件是压缩后的全量复制二进制文件
  • redis启动的时候会根据配置文件指定的路径找dump.rdb文件,将数据从硬盘写到内存

RDB的持久化策略配置

save 900 1
save 300 10
save 60 10000
  • 如果900秒内,redis执行了至少一次写操作,写入磁盘
  • 如果300秒内,redis执行了至少十次写操作,写入磁盘
  • 如果60秒内,redis执行了至少一万次写操作,写入磁盘

可以看到,RDB文件的更新频率是根据规定时间内更新次数决定的,必须同时满足两个条件才会触发。并且使用的是bgsave方式做持久化

RDB的优缺点
优点:由于RDB文件存储的是全量的二进制文件,相对于AOF方式更接近底层,所以恢复数据更快

缺点:无法实时持久化,可能丢失最后一次持久化之后的数据。每次持久化都需要创建子进程,频繁操作会导致成本过高。RDB持久化方式存在高低版本不兼容问题。

AOF持久化原理

AOF是基于命令追加的方式,保存的是应用层面对redis做的操作命令

开启AOF持久化

appendonly yes (默认为no)

redis启动的时候会从配置文件中拿到AOF文件地址,自动恢复数据

重要参数

  • appendfsync always //redis内存一旦有新数据,强制更新到硬盘,实时持久化,但是性能影响较大
  • appendfsync everysec //每秒强制写入磁盘一次,在性能和防止数据丢失方面折中,推荐使用
  • auto-aof-rewrite-percentage 100 //aof文件大小翻倍时进行压缩
  • auto-aof-rewrite-min-size 64mb //aof文件超过64mb才考虑压缩

AOF的持久化流程
AOF持久化流程

  1. 所有的写入命令会追加到AOF缓冲区
  2. 达到AOF同步条件后,像硬盘同步数据
  3. 当AOF文件足够大时,会进行自我压缩
  4. redis重启时加载AOF文件到redis的虚拟内存

问:RDB和AOF同时开启,redis会使用哪种方式恢复数据?
答: AOF。RDB是基于快照因为AOF数据更全。

在实际生产过程应该选择RDB还是AOF?

  1. 如果redis数据仅仅是作为一个缓存使用,数据丢失对系统无影响,可以不做持久化处理。
  2. 如果可以接受十几分钟的数据丢失,可以选择RDB,因为RDB数据恢复更快。如果数据非常重要,持久化要达到秒级,选择AOF。
  3. 如果需要做数据同步,可以选择两者同时开启,启动redis做数据恢复时,用aof,做数据备份用rdb。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisRDBAOF是两种不同的持久化机制。RDB全称Redis Database Backup file,它是将内存中的所有数据记录在磁盘上的快照文件。当Redis实例故障重启后,可以从磁盘中的RDB文件读取数据来进行恢复。RDB文件默认保存在当前运行目录,每次触发RDB时会生成一个新的RDB文件来覆盖旧文件,以保证备份数据的最新性。 AOF全称Append Only File,它是将Redis的操作以日志的形式追加到文件中。AOF文件的保存路径与RDB的路径一致。如果同时开启了RDBAOFRedis会优先根据AOF文件来进行数据恢复RDBAOF的目的都是为了将Redis中的数据持久化到磁盘中,以防止数据丢失。因为Redis中的数据是基于内存的,一旦服务器断电或宕机,数据就会直接丢失。通过使用RDBAOF,可以在Redis实例故障重启后,根据备份文件进行数据恢复。 总结来说,RDB是将内存中的数据直接拷贝到文件中的持久化方式,而AOF是将Redis的操作以日志的形式追加到文件中的持久化方式。根据配置的不同,可以选择使用RDBAOF或同时使用两者来实现数据持久化。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span> #### 引用[.reference_title] - *1* *4* [详解RedisRDBAOF](https://blog.csdn.net/u014225032/article/details/125856164)[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_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis持久化的两种方式:RDBAOF(详解)](https://blog.csdn.net/starboyxyh/article/details/127503310)[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_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值