🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### Redis cluster架构 Redis集群是一个提供在多个Redis间节点间共享数据的程序集 Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令,Redis 集群的优势: * 自动分割数据到不同的节点上; * 整个集群的部分节点失败或者不可达的情况下能够继续处理命令; > redis cluster保证的是AP ![](https://img.kancloud.cn/24/7f/247f83a4a0d174dd7a3770b11812d0b1_963x651.png) ### 整体设计 * 数据hash分布在不同的Redis节点实例上; * M/S的切换采用Sentinel; * 写:只会写master Instance,从sentinel获取当前的master Instance; * 读:从Redis Node中基于权重选取一个Redis Instance读取,失败/超时则轮询其他Instance;Redis本身就很好的支持读写分离,在单进程的I/O场景下,可以有效的避免主库的阻塞风险; * 通过RPC服务访问,RPC server端封装了Redis客户端,客户端基于Jedis开发; ### Redis cluster数据分片 Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念; Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽;集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么: 节点 A 包含 0 到 5500号哈希槽; 节点 B 包含5501 到 11000 号哈希槽; 节点 C 包含11001 到 16384号哈希槽; ### Redis cluster主从复制模型 Redis Cluster要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点(可以有多个slave)