谈谈 Redis 分片集群模式

谈谈 Redis 分片集群模式
优点
● 无中心架构,支持动态扩容
● Cluster 自动具备哨兵监控和故障转移(主从切换)能力
● 客户端连接集群内部地址可自动发现
● 高性能、高可用,有效解决了 Redis 分布式需求
缺点
● 运维复杂
● 只能使用 0 号数据库

当 Redis 缓存数据量大到一台服务器无法缓存时,就需要使用 Redis 切片集群(Redis Cluster )方案,它将数据分布在不同的服务器上,以此来降低系统对单主节点的依赖,从而提高 Redis 服务的读写性能。
Redis Cluster 方案采用哈希槽(Hash Slot),来处理数据和节点之间的映射关系。在 Redis Cluster 方案中,一个切片集群共有 16384 个哈希槽,这些哈希槽类似于数据分区,每个键值对都会根据它的 key,被映射到一个哈希槽中,具体执行过程分为两大步:
● 根据键值对的 key,按照 CRC16 算法(opens new window)计算一个 16 bit 的值。
● 再用 16bit 值对 16384 取模,得到 0~16383 范围内的模数,每个模数代表一个相应编号的哈希槽。
接下来的问题就是,这些哈希槽怎么被映射到具体的 Redis 节点上的呢?有两种方案:
● 平均分配: 在使用 cluster create 命令创建 Redis 集群时,Redis 会自动把所有哈希槽平均分布到集群节点上。比如集群中有 9 个节点,则每个节点上槽的个数为 16384/9 个。
● 手动分配: 可以使用 cluster meet 命令手动建立节点间的连接,组成集群,再使用 cluster addslots 命令,指定每个节点上的哈希槽个数。
● 需要注意的是,在手动分配哈希槽时,需要把 16384 个槽都分配完,否则 Redis 集群无法正常工作

错误的理解,Redis 分片集群最多只能存储 16384 个键值对。其实,一个槽位,可以放多个键值对。

你可能感兴趣的:(Redis,redis,数据库,缓存)