【Redis / 缓存内核】Cluster:16384 slot · MOVED/ASK · 多 key 同槽

💡 原文中文,约6000字,阅读约需15分钟。
📝

内容提要

Redis Cluster 使用 16384 个哈希槽管理键,确保多键命令在同一槽内保持原子性。MOVED 和 ASK 用于路由更新和请求重定向。客户端需处理槽映射,避免跨槽事务错误,扩容时需按规范更新槽映射以确保系统稳定性。

🎯

关键要点

  • Redis Cluster 使用 16384 个哈希槽管理键,确保多键命令在同一槽内保持原子性。

  • MOVED 和 ASK 用于路由更新和请求重定向,客户端需处理槽映射以避免跨槽事务错误。

  • 扩容时需按规范更新槽映射,以确保系统稳定性。

  • 客户端一致性哈希与 Redis Cluster 的服务端哈希槽模型不同,Redis Cluster 选择服务端知晓槽映射。

  • hash tag 设计允许用户将相关键钉在同一槽,以便执行多键命令。

  • MOVED 表示永久迁移,ASK 表示一次性询问,客户端需根据不同情况处理请求。

  • 集群扩容时,使用 Cluster-aware 客户端可确保正确处理槽映射和请求重定向。

  • Redis Cluster 的槽分配与复制机制确保了高可用性和故障转移能力。

🔎

延伸解读

Redis Cluster 的哈希槽机制

Redis Cluster 使用 16384 个哈希槽来管理键,这种设计确保了多键命令在同一槽内的原子性。与客户端一致性哈希不同,Redis Cluster 选择服务端知晓槽映射,这样可以避免因客户端错误导致的跨槽事务问题。理解这一机制对于运维和开发者在进行集群扩容和管理时至关重要。

MOVED 与 ASK 的区别

在 Redis Cluster 中,MOVED 和 ASK 是两种不同的重定向机制。MOVED 表示永久迁移,客户端需要更新槽映射;而 ASK 则是一次性询问,客户端不需要更新映射。混淆这两者可能导致客户端路由表错误,影响系统稳定性,因此开发者在处理请求时需特别注意这两种状态的区别。

扩容时的注意事项

在进行 Redis Cluster 扩容时,务必按照规范更新槽映射,以确保系统的稳定性和高可用性。使用 Cluster-aware 客户端可以帮助正确处理槽映射和请求重定向,避免因手动操作导致的错误。此外,扩容期间可能会遇到 ASK/TRYAGAIN 状态,应用需做好重试机制,以应对可能的请求失败。

延伸问答

Redis Cluster 是如何管理键的?

Redis Cluster 使用 16384 个哈希槽来管理键,确保多键命令在同一槽内保持原子性。

MOVED 和 ASK 的区别是什么?

MOVED 表示永久迁移,客户端需更新槽映射;ASK 表示一次性询问,仅在迁移过程中使用,不更新永久映射。

如何避免 Redis Cluster 中的跨槽事务错误?

客户端需处理槽映射,确保多键命令在同一槽内执行,以避免跨槽事务错误。

扩容 Redis Cluster 时需要注意什么?

扩容时需按规范更新槽映射,以确保系统的稳定性,建议使用 Cluster-aware 客户端处理请求重定向。

什么是 hash tag 设计,它有什么用?

hash tag 设计允许用户将相关键钉在同一槽,以便执行多键命令,确保它们在同一槽内。

Redis Cluster 的槽分配是如何进行的?

集群初次创建时,使用 redis-cli --cluster create 将 16384 个槽分配到各个 master,扩容时按槽粒度迁移。

🏷️

标签

➡️

继续阅读