redis中的Cluster集群
现状
- redis的主从复制,虽然可以实现部分代码的高可用,但是也会产生一些新的问题.如果redis提供的服务OPS达到10W/s,当前业务的OPS已经达到10W/s,或者内存单击容量达到256G,而当前业务的内存容量却要1T,此时在使用主从复制,就不是太合适,在主从复制的过程中,会造成大量的数据丢失,而且此时如果在使用主从复制,也会消耗大量的CPU性能,得不偿失.--------此时,我们可以使用redis的内置Cluster集群的方式来解决这个问题.
- 集群就是使用网络将若干台计算机联通起来,提供统一的管理方式,使其对外呈现单机的服务效果
Cluster集群结构设计
- 数据结构设计
- 注意,此时进行数据存储不是每个主机都存储一样的数据,而是将存储空间分为16384份,而每一个服务器持有其中一部分存储空间(注意:此时为了防止服务器宕机,需要给每个服务器至少配置一个备份),当有数据需要存储的时候,通过hash得到一个值,在用这个值去取16384的模,根据得出的这个值,判断应该存储在哪一个空间中(也叫槽).
- 集群内部的通讯设计
- 在集群中各个数据库是相互通信的,每个数据库中不仅保存有本个数据库中的所有数据,还保存了各个库中槽的编号数据.
- 当我们想要获取数据时,发送key到其中一个数据库中,数据库会计算出数据的存储位置,如果在本个数据库中,就会直接返回数据结果,如果在其他数据库中,就会直接告诉该数据的具体位置,直接获取该数据(注意: 备份的数据库并不参与运算,只是做一个备份功能,即使访问该数据库,也会自动转移到该数据存储的数据库进行查找).