Redis 如何保证数据不丢失?( 二 )

  • AOF 文件可能会出现损坏:由于 AOF 文件是不断地追加写入的,因此如果文件损坏,可能会导致数据无法恢复 。
  • 所以,AOF 持久化方式适合用于对数据实时性要求较高,但对数据大小和写入性能要求相对较低的场景,如需要对数据进行实时备份的应用场景 。
    (3)混合持久化Redis 混合持久化是指将 RDB 持久化方式和 AOF 持久化方式结合起来使用,以充分发挥它们的优势,同时避免它们的缺点 。
    它的优缺点如下:
    优点:
    混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,有减低了大量数据丢失的风险 。
    缺点:
    • 实现复杂度高:混合持久化需要同时维护 RDB 文件和 AOF 文件,因此实现复杂度相对于单独使用 RDB 或 AOF 持久化方式要高 。
    • 可读性差:AOF 文件中添加了 RDB 格式的内容 , 使得 AOF 文件的可读性变得很差;
    • 兼容性差:如果开启混合持久化,那么此混合持久化 AOF 文件,就不能用在 Redis 4.0 之前版本了 。
    所以,Redis 混合持久化方式适合用于,需要兼顾启动速度和减低数据丢失的场景 。但需要注意的是,混合持久化的实现复杂度较高、可读性差 , 只能用于 Redis 4.0 以上版本,因此在选择时需要根据实际情况进行权衡 。
    2、Redis 集群Redis 集群是将原先的单服务器,变为了多服务器,这样 Redis 保存的数据也从一台服务器变成了多台服务器,这样即使有一台服务器出问题了,其他的服务器还有备份数据 。所以使用 Redis 集群除了可以保证高可用,还保证了数据不丢失 。
    Redis 集群运行有以下 3 种方案:
    • 主从同步
    • 哨兵模式
    • Redis Cluster
    (1)主从同步主从同步 (主从复制) 是 Redis 高可用服务的基石,也是多机运行中最基础的一个 。我们把主要存储数据的节点叫做主节点 (master),把其他通过复制主节点数据的副本节点叫做从节点 (slave),如下图所示:
    Redis 如何保证数据不丢失?

    文章插图
    在 Redis 中一个主节点可以拥有多个从节点,一个从节点也可以是其他服务器的主节点,如下图所示:
    Redis 如何保证数据不丢失?

    文章插图
    (2)哨兵模式【Redis 如何保证数据不丢失?】主从同步存在一个致命的问题,当主节点奔溃之后,需要人工干预才能恢复 Redis 的正常使用 。所以我们需要一个自动的工具——Redis Sentinel (哨兵模式) 来把手动的过程变成自动的,让 Redis 拥有自动容灾恢复 (fAIlover) 的能力 。哨兵模式如下所示:
    Redis 如何保证数据不丢失?

    文章插图

    小贴士:Redis Sentinel  的最小分配单位是一主一从 。

    (3)Redis ClusterRedis Cluster 是 Redis 3.0 版本推出的 Redis 集群方案,它将数据分布在不同的服务区上,以此来降低系统对单主节点的依赖,并且可以大大的提高 Redis 服务的读写性能 。Redis Cluster 架构图如下所示:
    Redis 如何保证数据不丢失?

    文章插图
    从上图可以看出 Redis 的主从同步只能有一个主节点,而 Redis Cluster 可以拥有无数个主从节点,因此 Redis Cluster 拥有更强大的平行扩展能力,也就是说当 Redis Cluster 拥有两个主从节点时,从理论上来讲 Redis 的性能相比于主从来说性能提升了两倍,并且 Redis Cluster 也有自动容灾恢复的机制 。
    小结Redis 保证数据不丢失的主要手段有两个:持久化和集群运行 。其中持久化有三种实现:RDB、AOF、混合持久化;而集群(运行)也包含了三种实现:主从复制、哨兵模式和 Redis Cluster 。




    推荐阅读