面试题答案
一键面试槽指派基本原理
Redis集群采用哈希槽(Hash Slot)的方式来分配数据。整个集群有16384个哈希槽,每个键通过CRC16算法计算出一个16位的哈希值,然后对16384取模,得到的结果就是该键应该被分配到的槽编号。每个节点负责一部分槽,当客户端对某个键进行操作时,先计算出该键对应的槽,然后找到负责该槽的节点进行操作。
优化分配方案及优缺点
- 手动迁移槽
- 方案:通过Redis提供的命令(如
CLUSTER SETSLOT <slot> IMPORTING <source_node_id>
和CLUSTER SETSLOT <slot> MIGRATING <target_node_id>
等),手动将负载过高节点上的部分槽迁移到负载较低的节点。 - 优点:精准控制槽的迁移,可根据实际情况灵活调整,能快速缓解负载过高节点的压力。
- 缺点:操作复杂,需要对集群结构和节点状态有深入了解,迁移过程中可能会影响业务读写,且手动操作容易出错。
- 方案:通过Redis提供的命令(如
- 重新分片
- 方案:使用Redis的重新分片工具(如
redis-trib.rb reshard
),自动将负载过高节点的槽均匀分配到其他节点。工具会计算并规划出最优的槽迁移方案。 - 优点:自动化程度高,操作相对简单,能更全面地均衡集群负载,减少人工干预导致的错误。
- 缺点:重新分片过程对集群性能影响较大,可能会导致短暂的服务不稳定,而且重新分片工具在不同版本Redis中的兼容性可能存在问题。
- 方案:使用Redis的重新分片工具(如