Redis 学习记录

一、Redis介绍

Redis 支持单机、主从、哨兵、集群多种架构模式

1.1、单机模式

单机模式顾名思义就是安装一个 Redis,启动起来,业务调用即可。例如一些简单的应用,并非必须保证高可用的情况下可以使用该模式。

优点

部署简单;

成本低,无备用节点;

高性能,单机不需要同步数据,数据天然一致性。

缺点

可靠性保证不是很好,单节点有宕机的风险。

单机高性能受限于 CPU 的处理能力,Redis 是单线程的。

  单机 Redis 能够承载的 QPS(每秒查询速率)大概在几万左右。取决于业务操作的复杂性,Lua 脚本复杂性就极高。假如是简单的 key value 查询那性能就会很高。

  假设上千万、上亿用户同时访问 Redis,QPS 达到 10 万+。这些请求过来,单机 Redis 直接就挂了。系统的瓶颈就出现在 Redis 单机问题上,此时我们可以通过主从复制解决该问题,实现系统的高并发。

1.2、主从复制

Redis 的复制(Replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(Master),而通过复制创建出来的复制品则为从服务器(Slave)。 只要主从服务器之间的网络连接正常,主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同。

  数据的复制是单向的,只能由主节点到从节点,简单理解就是从节点只支持读操作,不允许写操作。主要是读高并发的场景下用主从架构。主从模式需要考虑的问题是:当 Master 节点宕机,需要选举产生一个新的 Master 节点,从而保证服务的高可用性。

优点

  1. Master/Slave 角色方便水平扩展,QPS 增加,增加 Slave 即可;
  2. 降低 Master 读压力,转交给 Slave 节点;
  3. 主节点宕机,从节点作为主节点的备份可以随时顶上继续提供服务;

缺点

  1. 可靠性保证不是很好,主节点故障便无法提供写入服务;
  2. 没有解决主节点写的压力;
  3. 数据冗余(为了高并发、高可用和高性能,一般是允许有冗余存在的);
  4. 一旦主节点宕机,从节点晋升成主节点,需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预;
  5. 主节点的写能力受到单机的限制;
  6. 主节点的存储能力受到单机的限制。

1.3、哨兵模式

优点 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都有; 主从可以自动切换,系统更健壮,可用性更高; Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

缺点 主从切换需要时间,会丢失数据; 还是没有解决主节点写的压力; 主节点的写能力,存储能力受到单机的限制; 动态扩容困难复杂,对于集群,容量达到上限时在线扩容会变得很复杂。

1.4、集群模式

 单机、主从、哨兵的模式数据都是存储在一个节点上,其他节点进行数据的复制。而单个节点存储是存在上限的,集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,还可以分成多个分片。

优点

无中心架构;

可扩展性,数据按照 Slot 存储分布在多个节点,节点间数据共享,节点可动态添加或删除,可动态调整数据分布; 高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本。 实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升。

缺点

数据通过异步复制,无法保证数据强一致性; 集群环境搭建复杂,不过基于 Docker 的搭建方案会相对简单。