?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
CLUSTER FORGET node-id
自3.0.0起可用。
時間復(fù)雜度: O(1)
該命令用于從接收命令的 Redis 群集節(jié)點的已知節(jié)點集合中刪除通過節(jié)點 ID 指定的節(jié)點。換句話說,從接收命令的節(jié)點的節(jié)點表中刪除指定的節(jié)點。
因為當(dāng)給定節(jié)點是群集的一部分時,參與群集的所有其他節(jié)點都知道它,為了將節(jié)點從群集中徹底刪除,必須將 CLUSTER FORGET 命令發(fā)送到所有其余節(jié)點,無論他們是主人或奴隸。
然而,該命令不能簡單地從收到該命令的節(jié)點的內(nèi)部節(jié)點表中刪除該節(jié)點,它也實現(xiàn)禁止列表,不允許再次添加同一節(jié)點作為處理心跳分組的八卦部分的副作用從其他節(jié)點收到。
在下面的例子中,我們將說明為什么該命令不能僅從節(jié)點表中移除給定的節(jié)點,而是要阻止它再次被重新插入一段時間。
假設(shè)我們有四個節(jié)點,A,B,C 和 D。為了僅以三個節(jié)點集群 A,B,C 結(jié)束,我們可以按照以下步驟操作:
1. 重新整理從 D 到節(jié)點 A,B,C的 所有散列槽。
2. D 現(xiàn)在是空的,但仍列在 A,B 和 C 的節(jié)點表中。
3. 我們聯(lián)系 A,并發(fā)送CLUSTER FORGET D
。
4. B 向節(jié)點 A 發(fā)送心跳數(shù)據(jù)包,其中列出了節(jié)點 D.
5. A不再知道節(jié)點D(見步驟3),所以它開始與D握手。
6. D 端重新添加到 A 的節(jié)點表中。
正如你所看到的那樣,刪除一個節(jié)點是脆弱的,我們需要發(fā)送 CLUSTER FORGET 命令給所有的節(jié)點,希望在此期間沒有處理八卦部分。由于這個問題,該命令為每個條目實施一個帶有過期時間的禁止列表。
那么該命令真正的作用是:
1. 指定的節(jié)點將從節(jié)點表中刪除。
2. 刪除的節(jié)點的節(jié)點 ID 被添加到禁止列表中,持續(xù)1分鐘。
3. 在處理來自其他節(jié)點的心跳包中收到的八卦部分時,節(jié)點將跳過禁止列表中列出的所有節(jié)點 ID。
這樣我們有一個60秒的窗口來通知群集中的所有節(jié)點我們要刪除一個節(jié)點。
該命令不成功,并在以下情況下返回錯誤:
1. 節(jié)點表中找不到指定的節(jié)點標識。
2. 接收命令的節(jié)點是從屬節(jié)點,并且指定的節(jié)點ID標識其當(dāng)前主節(jié)點。
2. 節(jié)點 ID 標識了我們發(fā)送命令的同一個節(jié)點。
簡單的字符串回復(fù):OK
如果命令執(zhí)行成功,否則返回錯誤。