2016-12-08 19 views
0

我製作了一個程序,可以通過一些規則將數字轉換爲某些序列號,並檢查是否使用了序列號。我使用redis來做檢查工作。如何確保redis中主從站之間的數據一致性

首先,從機獲取num1。當結果不爲零時,表示使用序列號,因此返回'used'。

其次,如果結果是零,在主機設定NUM1並返回「新」(一旦退貨,NUMS意味着「拿來主義」)

問題是,它與完成同步過程之前主會崩潰奴隸,所以這個數字可能不在奴隸。此時在slave上獲取num1,它返回'new',但使用num1。

如何確保redis中master和slave之間的數據一致性?

+0

Redis只能達到最終的一致性。爲什麼不從主人那裏讀取?此外,爲了從崩潰中恢復,您應該使用持久性配置Redis。 –

+0

@for_stack崩潰的主設備可能無法重新啓動。這是否意味着需要在採取進一步行動之前檢查同步狀態,例如「返回'新'」 – chenwh

+0

我認爲您應該寫入並從主讀取。如果主人失敗,Redis哨兵將選舉一個奴隸作爲新主人。然後你切換到新的主人閱讀和寫作。但是,您可能會丟失一些數據。如果您不想實現數據丟失,則可能需要考慮其他一些數據庫。 –

回答

0

閱讀有關WAIT命令 - 它允許你指定用在採取進一步行動之前,最近的變化更新奴隸的數量。

+0

這個問題困擾了我很長一段時間。感謝您的幫助。 – chenwh

0

Redis使用異步複製,並且不可能確保從服務器實際接收到給定的寫入。總會有一個數據丟失的窗口。

Replication Docs

相關問題