2016-12-08 2 views
0

Я создаю программу, которая может преобразовывать числа в некоторые серийные номера по некоторым правилам и проверять, используются ли серийные номера. И я использую redis для выполнения проверки.Как обеспечить согласованность данных между master и slave в redis

Сначала введите num1 в раб. когда результат не равен нулю, это означает, что используется серийный номер, поэтому return 'used'.

Во-вторых, если результат равен нулю, установите num1 в мастера и вернуть «новый» (когда-то вернуться, то НУМС значит «использовать»)

Проблема заключается в том, что мастер будет врезаться, прежде чем завершить процесс синхронизации с раб, поэтому число может быть не в рабстве. В это время получите num1 в slave, он возвращает 'new', но используется num1.

Как обеспечить согласованность данных между мастером и подчиненным в redis?

+0

Redis может достичь только последовательности. Почему бы не прочитать от мастера? Также для восстановления после сбоя вы должны настроить Redis с сохранением. –

+0

@for_stack сбойный мастер не сможет перезагрузиться. Означает ли это, что нужно проверить состояние синхронизации перед тем, как предпринять дальнейшие действия, такие как «return» new » – chenwh

+0

Думаю, вам следует писать и читать с мастера. Если мастер терпит неудачу, Redis sentinel выберет раб как новый мастер. Затем вы переключаетесь на новый мастер для чтения и записи. Однако вы можете потерять некоторые данные. Если вы хотите добиться потери данных, вам может потребоваться рассмотреть некоторые другие базы данных. –

ответ

0

Читайте о команде WAIT - она ​​позволяет указать количество рабов, которые были обновлены с последним изменением, прежде чем принимать дальнейшие меры.

+0

Эта проблема смутила меня в течение длительного времени. Спасибо за помощь. – chenwh

0

Redis использует асинхронную репликацию, и невозможно гарантировать, что ведомый фактически получил заданную запись. Всегда будет окно для потери данных.

Replication Docs

Смежные вопросы