Redis中的RDB和 AOF的区别

Redis中持久化技术分为两种,一种是RDB,一种是AOF.

这两者有什么区别呢?

定义的区别:

  1. RDB:RDB是每隔一段时间自动将内存中的数据集快照写入磁盘中,也就是我们所说的Snapshot快照,他恢复(读取)数据是将快照文件直接读取到内存中.
  2. AOF:AOF是用日志的形式将每一个写操作都记录在日志文件中,只允许进行增量操作,不允许进行修改操作.他恢复(读取)数据来执行过的操作重新执行一遍.

实现的区别

  1. RDB: Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能.如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失.
  2. AOF:Redis中的AOF默认是不开启的,我们可以在redis.conf 配置文件中进行编辑,开启AOF功能,当需要对数据进行恢复操作时,将之前持久化保存的AOF文件替换掉redis保存rdb文件的目录下,重新启动的redis进程将AOF文件中记录的写操作重新执行一遍,即可恢复数据.

注: 当AOF和RDB同时开启时,AOF优先级更高,因为AOF恢复数据更加全面.

触发机制的区别

  1. RBD:间隔一段时间后自动进行保存操作.默认频率是1分钟内改了1万次,或5分钟内改了10次,或15分钟内改了1次.
  2. AOF:每进行一次写操作,就会自动对原先的.aof文件进行增量操作.

细节上的区别

  1. RDB:在redis进行RDB持久化时,有两种操作:save 和 bgsave; 他们的区别就是当进行save操作时,其他线程进入阻塞状态,当持久化结束后,在进行相应,而bgsave是在持久化的同时,redis仍能响应其他请求.
  2. AOF:AOF持久化形成的.aof文件因为是只能进行增量操作,所以文件会越来越大,这个时候我们就需要对文件进行压缩处理.而redis自动为我们提供这项服务,就是Rewrite压缩.默认是当新的.aof文件大小是原来.aof文件大小的两倍,且文件大小>64M时触发.

小结

  1. RDB在恢复较大的数据集的时候效率要高于AOF,因为数据的直接覆盖要比执行命令更快一些.
  2. RDB可能存在数据丢失的情况,当在存储间隔期时,如果redis 宕机的话,这一时间段的数据就会丢失.而AOF会将所有的写操作按照配置文件中的规定进行记录,默认是立刻进行记录,所以数据丢失情况较少.
  3. AOF因为是就操作进行记录,所以很容易被其他人进行破解,从而对数据进行分析.
RedisRDBAOF是两种持久化机制,用于将内存的数据持久化到磁盘上,以便在Redis重启时恢复数据。 RDBRedis Database)是Redis的默认持久化方式,它使用快照的形式将数据保存到硬盘上。当满足一定条件时,Redis会自动执行快照操作,将内存的数据保存到RDB文件RDB文件是一个二进制文件,包含了Redis在某个时间点上的所有数据。RDB具有紧凑和高效的特点,在恢复大数据集时速度较快。但是,RDB只能定期保存数据,并且在发生故障时可能会导致一定量的数据丢失。 AOF(Append-Only File)则是一种追加写日志的方式来实现持久化。每当有新的写操作发生时,Redis会将该操作追加到AOF文件的末尾。当Redis重启时,通过重新执行AOF文件的所有写操作来恢复数据。相比于RDBAOF具有更好的持久性,因为它可以记录每个写操作,避免了数据丢失。然而,AOF文件相对于RDB文件会更大,并且在恢复大数据集时,由于需要重新执行大量的写操作,恢复速度可能较慢。为了避免AOF文件过大,Redis提供了自动压缩和重写AOF文件的机制。 在选择RDBAOF之间的持久化方式时,需要根据实际需求来进行权衡。如果对数据的完整性要求较高,可以选择AOF方式;如果对数据的恢复速度和文件大小有较高的要求,则可以选择RDB方式。另外,也可以同时启用RDBAOF,以提高数据的安全性和灾难恢复能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值