纵向扩容
横向扩容
横向扩容指 Redis 主库的切片集群,相比于纵向扩容,横向扩容的性能以及扩展性更强
Redis Cluster
在切片集群中,数据需要分布在不同实例上,在 Redis 3.0 开始提供 Redis Cluster 来实现切片集群。
Hash Slot
Redis Cluster 使用 Hash Slot(哈希槽)来处理数据和实例之间的映射关系,一个切片集群有 16384 个哈希槽,每一个哈希槽都相当于硬盘的一个分区。
数据如何映射到 Redis 实例 ?
- 将 Key 通过 CRC16 算法得到一个 16bit 的值 A
- 将值 A 对 16384 取模,得到一个 0~16383 范围的哈希槽 B
- 将哈希槽 B / 切片集群中的实例个数 N 得到哈希槽所在实例
哈希槽的重定向
当 client 向 Redis 实例请求数据时,若该数据不在当前实例中,该实例会返回数据所在实例信息
(error) MOVED 13320 127.16.19.5:7379
固定标识 数据所在哈希槽 数据所在实例
当 client 向 Redis 实例请求数据时,若该数据正在迁移至新的 Redis 实例时会返回如下内容
(error) ACK 13320 127.16.19.5:7379
固定标识 数据所在哈希槽 数据正在迁往的实例