redis各种模式优缺点对比

主从模式

客户端可对主数据库进行读写操作,对从数据库进行读操作,主数据库写入的数据会实时自动同步给从数据库。

  • slave初始化第一步:slave启动后,向master发送SYNC命令,master将快照信息给到slave节点,并利用缓冲区来记录持续的写请求
  • slave初始化第二步:收到快照信息完成初始化,
  • slave初始化第三步:将缓冲区写请求给到slave节点,slave接收命令并执行,完成复制初始化
  • 开始同步写请求,master收到写请求后,同步给slave节点

优点

  • 读写分离:master能自动将数据同步到slave,可以进行读写分离,分担master的读压力
  • master、slave之间的同步是以非阻塞的方式进行的,同步期间,客户端仍然可以提交查询或更新请求

缺点

  • 不具备自动容错与恢复功能,master或slave的宕机都可能导致客户端请求失败,需要等待机器重启或手动切换客户端IP才能恢复
  • master宕机,如果宕机前数据没有同步完,则切换IP后会存在数据不一致的问题
  • 难以支持在线扩容,Redis的容量受限于单机配置
  • 每台redis服务器都存储相同的数据,很浪费内存

哨兵模式

主从模式中,我们讲到当主服务器中断服务后,需要人工手动来操作将一个从服务器升级为主服务器。 为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个:

  • (1)监控主服务器和从服务器是否正常运行。
  • (2)主服务器出现故障时自动将从服务器转换为主服务器。

主要流程是:

  • 1、定时发送请求,判断master是否应答
  • 2、不应答,主观认为master节点不可用,
  • 3、向其他哨兵发送请求,开启投票,如果其他哨兵也认同,则认为客观下线
  • 4、哨兵之间采取Raft算法选举领头哨兵
  • 5、领头哨兵开始从下线的master从节点中选举节点来做master节点,一套逻辑

优点

主从集群的优点,外加能自动选举master节点。

缺点

  • 哨兵节点也需要资源,万一哨兵出现问题咋办呢?
  • 主从模式的缺点也有,就是主从不一致,主master收到修改命令后,立马下线,都还没备份到从节点。
  • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
  • 每台redis服务器都存储相同的数据,很浪费内存。

集群模式:分布式

哨兵模式难以在线扩容,Cluster模式实现了Redis的分布式存储,即每台节点存储不同的内容,来解决在线扩容的问题。
Cluster采用无中心结构,它的特点如下:

  • 客户端与redis节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
  • 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
    这样任何一个请求可以获取数据,因为这些节点之间可以通信,不存在我这里的数据,我会去找其他节点,请求数据。
  • 节点的fail是通过集群中超过半数的节点检测失效时才生效

取数据:

  • 在redis的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383。还有一个就是cluster,可以理解为是一个集群管理的插件。
  • 存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,
  • 通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

优点

  • 无中心架构,数据按照slot分布在多个节点。
  • 集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
  • 可线性扩展到1000多个节点,节点可动态添加或删除
  • 能够实现自动故障转移,节点之间通过gossip协议交换状态信息,用投票机制完成slave到master的角色转换

缺点

  • 客户端实现复杂,驱动要求实现Smart Client,缓存slots mapping信息并及时更新,提高了开发难度。目前仅JedisCluster相对成熟,异常处理还不完善,比如常见的“max redirect exception”
  • 节点会因为某些原因发生阻塞(阻塞时间大于 cluster-node-timeout)被判断下线,这种failover是没有必要的
  • 数据通过异步复制,不保证数据的强一致性
  • slave充当“冷备”,不能缓解读压力
  • 批量操作限制,目前只支持具有相同slot值的key执行批量操作,对mset、mget、sunion等操作支持不友好
  • key事务操作支持有线,只支持多key在同一节点的事务操作,多key分布不同节点时无法使用事务功能

参考文章

redis集群优缺点

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis的主从模式哨兵模式都是用实现高可用性和数据冗余的方式。 主从模式的优点: 1. 数据冗余和高可用性:主从模式通过将数据复制到多个从节点上,实现了数据的冗余备份,当主节点发生故障时,可以快速切换到从节点。 2. 读写分离:主节点处理写操作,而从节点处理读操作,可以提高系统的读写性能。 3. 扩展性:可以通过增加从节点来扩展系统的读取能力。 主从模式的缺点: 1. 单点故障:如果主节点发生故障,需要手动进行主从切换操作。 2. 数据同步延迟:由于数据同步需要一定的时间,所以在主节点发生故障并切换到从节点时,可能会丢失一部分数据。 哨兵模式的优点: 1. 自动故障检测和切换:哨兵模式引入了哨兵节点,负责监控主节点的状态,当主节点发生故障时,会自动进行主从切换。 2. 高可用性:哨兵模式可以自动将一个从节点升级为主节点,保证系统的高可用性。 哨兵模式的缺点: 1. 配置复杂:哨兵模式需要配置哨兵节点的信息,增加了系统的复杂度。 2. 性能损耗:哨兵模式需要额外的网络通信和节点间的协调,可能会导致一定的性能损耗。 总的来说,主从模式适用于对数据一致性要求较高且可以容忍手动切换的场景,而哨兵模式适用于对高可用性要求较高且可以接受一定性能损耗的场景。选择哪种模式要根据实际需求和系统特点进行权衡。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值