3

Redis 数据持久化策略

 2 years ago
source link: https://wnanbei.github.io/post/redis-%E6%95%B0%E6%8D%AE%E6%8C%81%E4%B9%85%E5%8C%96%E7%AD%96%E7%95%A5/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Redis

Redis 数据持久化策略

2021-06-06

阅读时长: 2 分钟

redis 提供了两种持久化的方式,分别是 RDB(Redis DataBase)AOF(Append Only File)

RDB,就是在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上。

Redis 在进行 RDB 数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程结束,才会用这个临时文件替换上次持久化好的文件。这种特性,让我们可以随时进行备份,因为快照文件总是完整可用的。

优点:

  • Redis 会单独 fork 一个子进程进行持久化,不影响主进程性能。
  • 大规模数据恢复更高效。
  • 备份文件总是完整可用。

缺点:

  • RDB 耗时较长,不够实时,在停机的时候会导致大量丢失数据。数据完整性较差。

AOF,则是将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,把这些写指令从前到后再重复执行一遍,实现数据恢复。开启 AOF 后,如果有写操作,如 SET 等,redis 就会追加到 AOF 文件的末尾。

默认的 AOF 持久化策略是每秒钟 fsync(指把缓存中的写指令记录到磁盘中)一次,因为在这种情况下,redis 仍然可以保持很好的处理性能,即使 redis 故障,也只会丢失最近 1 秒钟的数据。

优点:

  • 丢失数据的可能性小。
  • 有 Rewrite 机制可以控制 AOF 文件大小。
  • 断电、磁盘满等问题都不会影响 AOF 文件的可用性。

缺点:

  • AOF 文件会越来越大,占用较多空间。
  • 数据恢复效率较慢。

AOF Rewrite

Redis 提供了 AOF 文件重写(rewrite)机制,当 AOF 文件的大小超过所设定的阈值时,redis 就会启动 AOF 文件的内容压缩,只保留可以恢复数据的最小指令集。

例如调用了 100 次 INCR 指令,在 AOF 文件中可以用 rewrite 把这 100 条指令合并成一条 SET 指令。

流程:

  1. redis 会创建(fork)一个重写子进程,首先读取现有的 AOF 文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
  2. 同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的 AOF 文件中,保证原有的 AOF 文件的可用性,避免在重写过程中出现意外。
  3. 当重写子进程完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新 AOF 文件中。
  4. 追加结束后,redis 就会用新 AOF 文件来代替旧 AOF 文件。

因为 RDB 会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以通常需要 AOF 配合同时使用。

在 Redis 实例重启时,使用 RDB 持久化文件重新构建内存,再使用 AOF 重放近期的操作指令来实现完整恢复重启之前的状态。


Recommend

  • 75
    • www.hoohack.me 6 years ago
    • Cache

    [Redis源码阅读]redis持久化

    [Redis源码阅读]redis持久化

  • 45
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    Redis持久化

  • 61
    • 微信 mp.weixin.qq.com 6 years ago
    • Cache

    Redis 持久化

    Redis 持久化

  • 46
    • www.linkedkeeper.com 6 years ago
    • Cache

    Redis持久化译文

  • 43
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    进阶的Redis之数据持久化RDB与AOF

  • 58
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    进阶的 Redis 之数据持久化 RDB 与 AOF

    大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存。但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里面的数据就会丢失不见了。这样的...

  • 4

    Redis知识整合(二):数据的持久化 如果重启redis服务,或者重启redis所在的机器,那么对于将数据全部保存在内存中的redis而言,这两个操作无疑会让其数据全部丢失,此时如果我们没有做更多的容错方案,比如横向做集群、纵向做主从,此时...

  • 11

    从上一篇的 《深刻理解高性能Redis的本质》 中可以知道, 我们经常在数据库层上加一层缓存(如Redis),来保证数据的访问效率。 这样性能...

  • 7
    • juejin.cn 1 year ago
    • Cache

    Redis 持久化策略浅析

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的内存高速缓存数据存储服务。使用 ANSI C 语言编写,支持网络、可基于内存亦可持久化的日志型、Key-Value 数据存储,并提供多种语言的 API。 ▶ 简介

  • 3
    • dongzl.github.io 1 year ago
    • Cache

    Redis 集群高可用和数据持久化

    Redis 集群高可用和数据持久化原文链接(请科学上网):https://medium.com/@bb8s/ho...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK