Redis的持久化存储

Redis的持久化存储

Redis是一种高级key-value数据库。支持字符串、哈希表、列表、集合、有序集合等数据类型。

Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的。所以,我们需要将内存中的数据持久化。

为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中以某种方式同步到硬盘中,当redis重启后,可以从磁盘中恢复数据,这一过程就是持久化。

Redis中数据存储模式有2种: cache-only,persistence

  • cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;
  • persistence即为内存中的数据持久备份到磁盘文件,在服务重启后可以恢复,此模式下数据相对安全。

对于persistence持久化存储,Redis提供了两种持久化方法:

  • 基于快照形式的RDB(Redis DataBase)
  • 基于磁盘的AOF(Append-only file)

1、RDB持久化

(1)RDB概述

RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。

原理是将Reids在内存中的数据库记录定时写到磁盘上。

(2)RDB的优点

  • 使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能 。
  • 相比于AOF机制,RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快,RDB的启动效率会更高。
  • 系统出现灾难性故障,非常容易进行恢复。

(3)RDB的缺点

  • RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候。
  • RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

2、AOF持久化

(1)AOF概述

AOF将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或者即将写入),才进行实际的数据变更,“日志文件”保存了历史所有的操作过程;当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程。

原理是将Reids的操作日志以追加的方式写入文件。

(2)AOF的优点

  • AOF可以带来更高的数据安全性,即数据持久性。Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。
  • AOF的特性决定了它相对比较安全,可以将数据更加及时的同步到文件中,如果你期望数据更少的丢失,那么可以采用AOF模式;
  • 可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;
  • AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。
  • 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。
  • 如果日志写入不完整,支持redis-check-aof来进行日志修复;
  • 如果日志过大,Redis可以自动启用rewrite机制。
  • AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。

(3)AOF的缺点

  • AOF文件比RDB文件大,且恢复速度慢。
  • AOF是文件操作,对于变更操作比较密集的server,那么必将造成磁盘IO的负荷加重;
  • AOF文件会不断增大,它的大小直接影响“故障恢复”的时间。
  • 由于同步策略的不同,AOF在运行效率上往往会慢于RDB。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值