Redis持久化

目录

一:Redis持久化方式有哪些

1.RDB持久化

2.AOF持久化        

二:RDB和AOF的区别

区别:

RDB和AOF的优缺点

RDB优点

RDB缺点

AOF优点

AOF缺点

三:RDB和AOF到底该如何选择


一:Redis持久化方式有哪些

Redis有两种持久化方案:RDB持久化和AOF持久化。

1.RDB持久化

        RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照

2.AOF持久化        

        AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件

二:RDB和AOF的区别

 RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合使用。

区别:

1.RDB使用快照存储,AOF使用操作日志存储

2.RDB存储速度慢,AOF存储速度快

3.RDB恢复速度快,AOF恢复速度慢

4.RDB数据文件小,AOF数据文件大

5.RDB安全性低于AOF

bgsave:后台创建一个新的进程来做存储

aof重写:优化日志存储文件

三:RDB和AOF的优缺点

RDB优点

(1)RDB文件是紧凑的二进制文件,比较适合做冷备,全量复制的场景。

        RDB会生成多个文件,每个文件都代表了某一时刻的Redis完整的数据快照。可以控制Redis生成快照的时间,比较方便。在最坏的情况提供数据恢复时,RDB要比AOF快。

(2)相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复Redis进程,更加快速。

        因为RDB文件本身就是一个数据文件,恢复时直接加载到内存即可,而AOF还需要一条条执行命令。Redis只需要fork一个子进程,让子进程执行磁盘的IO操作进行RDB持久化即可。

(3)RDB对Redis对外提供的读写服务,影响非常小,可以让Redis保持高性能。因为Redis主进程只需要fork一个子进程,让子进程执行磁盘IO操作进行持久化即可。

(4)RDB使用单独子进程进行持久化,主进程不进行任何IO操作,保证了Redis的高性能。

RDB缺点

(1)若遇到Redis故障时,RDB比AOF丢失数据多。

        一般来说,RDB快照都是每隔5分钟或更长时间执行一次,这个时候就可能遇到最长5分钟的数据丢失。

(2)RDB每次fork子进程来执行RDB快照数据文件生成时,如果数据文件过大,可能会对客户端造成提供的服务暂停数毫秒甚至数秒。

(3)RDB无法实现实时持久化。

        RDB是间隔一段时间进行一次持久化,如果持久化之间Redis发生故障,会发生数据丢失。

AOF优点

(1)AOF持久化可以更好的避免数据丢失。

        一般AOF每隔一秒,通过后台线程执行一次fsync操作,最多丢失一秒的数据。

(2)AOF日志文件以append-only模式写入,写入性能比较高。

(3)AOF日志文件过大,出现后台重写操作,也不会影响客户端的读写。

(4)适合做灾难性的误删除紧急恢复。

        AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,name就可以立即拷贝AOF文件,将最后一条flushall命令删除,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据。

AOF缺点

(1)对于同一份文件来说,AOF日志文件通常比RDB数据快照文件更大,恢复速度慢。

(2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件。当然,每秒一次fsync,性能也还是很高的。

(3)以前AOF发生过bug,就是通过AOF记录的日志,进行数据恢复的时候,没有恢复一模一样的数据出来。

        所以说,类似AOF这种较为复杂的基于命令日志/merge/回放的方式,比基于RDB每次持久化一份完整的数据快照文件的方式,更加脆弱一些,容易有bug。不过AOF就是为了避免rewrite过程导致的bug,因此每次rewrite并不是基于旧的指令日志进行merge的,而是基于当时内存中的数据进行指令的重新构建,这样健壮性会好很多。

四:RDB和AOF到底该如何选择

1、不要仅仅使用RDB,因为那样会导致你丢失很多数据;

2、也不要仅仅使用AOF,因为那样有两个问题:

        你通过AOF做冷备,没有RDB做冷备,恢复速度更快;
        第二,RDB每次简单粗暴生成数据快照,更加健壮,可以避免AOF这种复杂的备份和恢复机制的bug;
3、综合使用AOF和RDB两种持久化机制,用AOF来保证数据不丢失,作为数据恢复的第一选择;

用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,还可以使用RDB来进行快速的数据恢复;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于 Redis 持久的可能面试问题: 1. Redis持久有哪些方式? Redis持久有两种方式,一种是 RDB 持久,一种是 AOF 持久。 2. RDB 持久和 AOF 持久有什么区别? RDB 持久是将 Redis 在内存中的数据快照保存到磁盘上,而 AOF 持久则是将 Redis 执行的每条写命令记录到磁盘上。RDB 持久可以节约磁盘空间,但可能会丢失最近的一些数据,而 AOF 持久可以保证数据不会丢失,但可能会占用更多的磁盘空间和写入时间。 3. Redis持久机制是如何保证数据一致性的? Redis持久机制可以通过在每次写操作后立即同步到磁盘,或者设置定期同步时间来保证数据一致性。 4. Redis持久可以在运行时进行吗? 可以,Redis持久可以在运行时进行配置和切换,例如可以在运行时从 RDB 切换到 AOF 持久,或者从 AOF 切换到 RDB 持久。 5. Redis持久会对性能产生影响吗? 会,Redis持久会增加磁盘 I/O 开销,可能会对写入性能产生一定的影响,但可以通过合理的配置来平衡性能和数据一致性。 6. Redis持久可以与 Redis 集群一起使用吗? 可以,Redis持久可以与 Redis 集群一起使用,但需要注意配置文件的设置和数据同步的策略。 总之,Redis持久是保证数据一致性和可靠性的重要手段,需要根据具体的业务需求和性能要求来选择合适的持久方式,并进行合理的配置和优。在面试中,还需要了解 Redis 持久的原理、机制、优缺点、与集群的结合等方面的知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值