首页/数据/Redis 进阶速查/ASKING:迁移中的临时通行证

ASKING:迁移中的临时通行证

收到 ASK 后客户端先向目标节点发送 ASKING,再重发原命令;ASKING 只对紧接的一条命令有效,用于槽迁移中间态的访问。

Redis 进阶速查数据更新于 2026-10-13

迁移中间态的临时通行证

槽迁移过程中会出现一个中间态:客户端拿着旧的路由信息访问源节点,而要读的键其实已经搬到目标节点了,这时源节点只能返回一个临时重定向,指向正在导入该槽的目标节点。客户端收到之后,要先向目标节点发送 ASKING,再重新执行原命令,目标节点才会放行这次访问。这个标记只对紧随其后的那一条命令有效,用完即失效。

基本信息

用法先发送允许访问的标记,紧接着执行目标命令
生效范围仅对紧随其后的一条命令有效
出现场景槽处于迁移中或导入中的中间状态
客户端处理主流客户端库会自动完成这套流程
结束标志迁移完成后不再收到临时重定向

典型使用场景

  • 手工调试迁移过程,验证目标节点确实能访问已搬过去的键
  • 排查迁移期间偶发的访问异常,判断是中间态还是配置错误
  • 自研客户端实现重定向处理逻辑时理解两种重定向的差别
  • 迁移完成后确认不再出现临时重定向,判断是否真正收尾
  • 演练中观察迁移对在线请求的实际影响范围

手工演示

手工演示
redis-cli -p 7001 ASKING              # 标记本连接允许访问导入中的槽
redis-cli -p 7001 GET user:1001       # 紧接着执行目标命令才有效
redis-cli -p 7000 CLUSTER GETKEYSINSLOT 1234 5   # 对照源节点的键分布
redis-cli -p 7001 CLUSTER NODES | grep -E 'migrating|importing'

两种重定向的区别

返回类型含义客户端动作
永久重定向键已稳定归属到另一个节点更新本地路由缓存后重发请求
临时重定向迁移中间态,键正在搬迁先标记再重发一次,不更新路由缓存
正常返回键就在当前节点直接使用返回结果
集群不可用报错槽无归属或状态异常按集群故障处理而不是重试
标记与后续命令必须在同一条连接上执行才符合语义,在不同连接上发送就失去作用,手工调试时尤其容易踩到。
迁移正常收尾后临时重定向会自动消失;如果它长期持续出现,说明迁移没有正确完成,需要检查迁移流程而不是继续重试。

易错点

  • 标记与命令发在不同连接上,目标节点不放行,误判为权限或配置问题
  • 自研客户端把临时重定向当作永久重定向处理,更新路由缓存后请求持续打偏
  • 迁移中断后长期残留中间态,访问异常被当成偶发抖动忽略
  • 客户端不做重试与标记处理,迁移窗口内的请求全部失败,被误认为集群故障

数据来源与参考

  • Redis 官方文档:ASKING 命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌