在Redis集群中,每個(gè)節(jié)點(diǎn)都會(huì)保存槽信息,比如Redis集群默認(rèn)有16384個(gè)槽,假設(shè)node0節(jié)點(diǎn)保存了0-4000槽數(shù)據(jù),node1保存了4001-8000槽數(shù)據(jù),node2 保存了80001-16383槽數(shù)據(jù),則在每個(gè)節(jié)點(diǎn)中,都保存有當(dāng)前節(jié)點(diǎn)處理哪些槽數(shù)據(jù),哪些數(shù)據(jù)由其他節(jié)點(diǎn)處理,如node0保存了0-4000由node0處理,4001-8000由node1處理,80001-16383由node2處理。
當(dāng)客戶端請求過來。如果首先到達(dá)node0,當(dāng)時(shí)這個(gè)key(假設(shè)計(jì)算出槽節(jié)點(diǎn)為10086)所在的槽并不在node0 節(jié)點(diǎn)上(假設(shè)node0通過自己保存結(jié)構(gòu)查詢出來處理key的節(jié)點(diǎn)為node1,地址為127.0.0.1:7001),node0 會(huì)返回給客戶端一個(gè)MOVED錯(cuò)誤,結(jié)果類似如下
MOVED 10086 127.0.0.1:7001
這樣客戶端就知道它應(yīng)該去127.0.0.1:7001再做請求