美文网首页
Redis的持久化

Redis的持久化

作者: 华木公子 | 来源:发表于2019-08-08 14:15 被阅读0次

    一 持久化的必要性

    redis持久化的目的主要是为了故障恢复。
    把持久化文件定期备份到其他存储设备,遇到灾难的时候可以恢复。

    二 持久化的分类和适用场景

    • RDB 模式(快照模式)
      每隔一定时间(如几分钟),定期生成当前redis内存中数据的一个快照文件。
      redis会开启一个新的子进程,由子进程来做内存数据快照。因此不会阻塞当前主进程效率。由于是内存快照,所以加载还原会很快。

    • AOF模式(追加模式)
      一条数据一条数据的追加到AOF文件中。追加过程如下:

      1. 每增加一条数据,就把数据追加到操作系统内存空间。
      2. 然后redis每一秒都会刷(fsync)一下操作系统内存中数据到磁盘的AOF文件中。
      3. 可见AOF文件会逐渐增大,于是当AOF增加到一定程度后,redis就会执行rewrite命令,重新基于当前内存数据生成一个新的AOF文件,然后基于新的AOF文件做数据写入,并删除原来老的AOF文件。
      4. 所以AOF始终只有一个文件,还占磁盘空间。

    三 持久化的企业级持久化方案

    • RDB通过子进程来生成内存快照,效率高,不影响主进程,还原效率高(内存直接加载)。数据健壮。
      缺点是快照周期生成,可能还原后会与真实情况数据缺失。如果内存数据过大,fork生成数据时,可能会影响主进程的读写,导致无响应几秒钟。建议间隔周期不要太大。
      非常适合冷备场景。

    *AOF是每次都要去处理文件,导致写速度没有RDB高。由于是数据文件,所以在还原时较慢。数据文件大,占据磁盘空间大,数据文件结构复杂。优点是数据备份齐全(可能只有一秒误差)。可以认为是一个数据处理日志。
    非常适合由于客户端误操作导致数据丢失等场景。比如误删除了一批数据,这时候,可以在AOF还没有进行rewrite之前,把AOF文件中的误删除命令删除,再恢复之前的数据。

    综上,redis实际上支持两种持久化方式同时开启,建议两者都开始。AOF作为热备,当前进程重启恢复数据用。RDB作为冷备,为磁盘崩溃等场景恢复数据适用。

    相关文章

      网友评论

          本文标题:Redis的持久化

          本文链接:https://www.haomeiwen.com/subject/lbecdctx.html