主从模式(读写分离)

作用是:

  • 主从复制:备份数据,即使部分节点损坏也可以恢复。
  • 读写分离:主节点负责写,从节点负责读。因为读事务比写事务多很多,所以把读事务交给多个从节点来负责,可以减轻主节点压力,提高效率。

缺点:

主节点宕机后,无法提供写事务,也无法重新选举主节点。

哨兵模式

哨兵模式建立在主从模式上,作用是当主节点宕机后,哨兵负责在slave中选一个成为新的主节点,当原本的主节点恢复后,就成为了从节点。

使用哨兵,相当于客户端不是直接访问Redis服务,而是先访问哨兵系统,哨兵告诉客户端哪个才是主节点。

集群模式

前面的模式中,每个节点都存储了完整的数据,浪费了很多内存空间。为了最大化利用内存,可以采用集群,就是分布式存储,即每个节点存储不同的内容。那么客户端如何知道它请求的key值对应的数据存储在哪个redis节点上呢?这里有三种方式。

  • 客户端分片:由客户端自己计算key值对应哪个redis节点。优点是降低服务器负担,缺点是客户端不知道服务端redis集群的具体情况,难以实现动态更改计算方式(但是好像一致性哈希不受影响)。
  • 服务端分片:客户端可以发起请求到集群中的任意一个节点。节点收到请求,若key存在于自身节点,则直接返回结果,若key不存在则告诉客户端key不存在,通过计算映射规则确定查询的key所在的节点,然后去这个节点查询,也就是一个重定向的过程。(Redis官方支持)
  • 代理分片:由proxy负责分片,然后客户端与proxy交互,proxy计算key所在的节点,并把请求发送到对应的节点。(冷启动服务里就是这个proxy经常cpu使用率过高而导致雪崩效应)