Redis持久化-RDB和AOF

Redis是内存数据库,如果不将内存的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库也会消失。所以Redis提供了持久化功能。

1.1、简介

内存:高效、断电(关机、内存数据会丢失)

硬盘:读写速度慢于内存,断电数据不会丢失

1.2、RDB(Redis DataBase)

RDB:是Redis默认的持久化机制。RDB相对于照快照,保存的是一种状态。

快照:将内存中的数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb

优点:

  • 快照保存数据极快、还原数据极快
  • 适用于灾难备份
  • 适合大规模的数据恢复。
  • 如果业务对数据完整性和一致性要求不高,RDB是很好的选择。

缺点:

  • 小内存机器不适合使用,RDB机制符合要求就会快照
  • 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了,那么将丢失最后一次的数据。
  • 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍),最后再将临时文件替换之前的备份文件。

1.3、RDB的触发机制

触发RDB持久化分为手动触发和自动触发

1.3.1、自动触发RDB快照

1 在指定的时间间隔内,执行指定次数的写操作(即key值发生变化,读操作不改变key值)
2 执行save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (异步)命令
3 执行flushall 命令,清空数据库所有数据,意义不大。
4 执行shutdown 命令,保证服务器正常关闭且不丢失任何数据。

1.3.2、手动触发

  1. save:阻塞当前Redis的服务器,直到RDB过程完成。
  2. bgsave:Redis进程执行fork操作子进程,由子进程负责RDB持久化,阻塞只发生在fork阶段(极其短的时间)

1.3.3、save与bgsave

命令savebgsave
IO类型同步异步
是否阻塞是(阻塞发生在fork)
优点不会消耗额外内存不阻塞客户端命令、父进程不进行I/O操作
缺点阻塞客户端命令需要fork子进程,消耗内存

2.1、AOF(Append only File)

​ AOF持久化会记录服务器执行的所有写操作命令(写入至appendonly.aof),并在redis重启的时候,通过回访AOF文件来还原数据集,文件使用append-only的默认,所有操作都会追加到文件的末尾。当AOF文件体积超出保存数据集状态的情况下,会进行一个重写(rewrite)操作,确保文件不会太大。通常情况下,AOF文件保存的数据及会比RDB文件保存的数据集更完整。

1、AOF的优点

​ AOF可以更好的保障数据不丢失,默认情况下AOF会每隔一秒,通过一个后台线程执行一次fsync操作,所以最多只会丢失1秒的数据,AOF日志文件已append-only模式写入,没有任何磁盘寻址的开销,性能非常高,即使文件损坏了。也可以通过redis提供的工具进行修复。当AOF文件过大的时候,会在后台进行重写,确保日志文件不会过大。

2、 AOF的缺点
​ 同一份数据,通常AOF会比RDB文件更大,AOF开启后,支持的写QPS会比RDB的低,因为AOF一般设置为每秒fsync一次日志文件,其次在数据恢复的时候,会比较慢,做冷备不太适合。

2.2、AOF的触发机制

  • 修改同步always:同步持久化,每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性较好
  • 每秒同步ervrysec:异步操作,每秒记录,如果一秒内宕机,则数据丢失
  • no:从不同步
命令alwayseverysecno
优点不丢失数据每秒一次fsync丢失一秒数据不用管
缺点IO开销较大丢失一秒数据不可控

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值