MST

星途 面试题库

面试题:Redis集群中ASK错误通常在什么场景下出现?

请阐述Redis集群产生ASK错误时,客户端、集群节点之间的交互情况以及导致该错误产生的一般业务场景。
30.0万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

客户端、集群节点交互情况

  1. 请求发送:客户端向集群中的某个节点发送命令,该节点负责处理键值对相关操作。
  2. ASK错误响应:当此节点发现请求的键并不属于自己负责的哈希槽范围,而是属于另一个节点,但目标节点正在进行数据迁移(slot 处于 importing 状态)时,该节点会向客户端返回一个 ASK 错误,告知客户端该键实际所在的目标节点信息(包括节点 IP 和端口)。
  3. 重定向请求:客户端收到 ASK 错误后,会向错误信息中指定的目标节点发送一个 ASKING 命令,接着重新发送原本的操作命令。这个 ASKING 命令作用是让目标节点临时允许客户端在不进行完整的重新分片槽映射更新的情况下,处理该请求。目标节点在收到 ASKING 命令后,会允许客户端执行后续紧跟的操作命令,即使该键原本不属于其正常负责的哈希槽。

导致该错误产生的一般业务场景

  1. 数据迁移期间:在 Redis 集群进行数据迁移时,例如从节点 A 迁移部分哈希槽数据到节点 B,当节点 B 处于正在导入(importing)这些哈希槽数据状态时,客户端如果请求访问这些正在迁移的哈希槽中的键,就可能出现 ASK 错误。因为原节点 A 发现键已不属于自己,而新节点 B 虽未完全完成导入,但客户端请求已至,就会触发这种临时重定向机制。
  2. 集群动态调整:当集群进行扩容、缩容操作时,需要对哈希槽进行重新分配,在此过程中,如果客户端在哈希槽分配尚未完全稳定时,访问了正在重新分配的哈希槽对应的键,就可能遭遇 ASK 错误。