Redis集群-ASK错误

作者: 于情于你 | 来源:发表于2020-09-03 02:28 被阅读0次

    在进行重新分片期间,可能会出现一种情况:源节点向目标节点迁移一个槽的过程中,属于被迁移槽的一部分键值对保存在源节点里面,而另一部分键值对则保存的在目标节点里面。

    当客户端向源节点发送一个和数据库有关的命令,并且命令要处理的数据库键恰好就属于正在被迁移的槽时:


image.png

    接到ASK错误的客户端会根据错误提供的IP地址和端口号,转向至正在导入槽的目标节点,然后首先向目标节点发送一个ASKING命令,之后再重新发送原本想要执行的命令。

ASKING命令

    ASKING命令唯一要做的就是打开发送该命令的客户端的REDIS ASKING标识

    在一般情况下,如果客户端向节点发送一个关于槽i的命令,而槽i又没有指派给这个节点的话,那么节点将向客户端返回一个MOVED错误;但是,如果节点的clusterState.importing_slots_from[i]显示节点正在导人槽i,并且发送命令的客户端带有REDIS_ASKING标识,那么节点将破例执行这个关于槽i的命令一次。


image.png
客户端的REDIS_ASKING标识是一个一次性标识,当节点执行了一个带有REDIS_ASKING标识的客户端发送的命令之后,客户端的REDIS_ASKING标识就会被移除。

相关文章

网友评论

    本文标题:Redis集群-ASK错误

    本文链接:https://www.haomeiwen.com/subject/pkagsktx.html