2016-12-08 1 views
0

몇 가지 규칙에 따라 숫자를 일부 일련 번호로 변환하고 일련 번호가 사용되는지 확인하는 프로그램을 만듭니다. 그리고 나는 체크 작업을하기 위해 redis를 사용합니다.redis에서 마스터와 슬레이브 간의 데이터 일관성을 유지하는 방법

먼저 슬레이브에서 num1을 가져옵니다. result가 nil이 아니라면 일련 번호가 사용되었으므로 'used'를 반환합니다. 결과 닐 경우

둘째, 마스터 NUM1을 설정

문제로 동기화 프로세스를 완료하기 전에 마스터 충돌 것이다 (한번의 nums가 '사용'의미 반환) '새로운'반환 노예, 번호는 노예가 아닐 수도 있습니다. 이 때 슬레이브에서 num1을 얻으면 'new'를 반환하지만 num1이 사용됩니다.

redis에서 마스터와 슬레이브간에 데이터 일관성을 유지하는 방법은 무엇입니까?

+0

Redis는 결국 일관성을 유지할 수 있습니다. 왜 선생님이 읽어 보지 않으시겠습니까? 또한 충돌을 복구하려면 Redis를 지속성으로 구성해야합니다. –

+0

@for_stack 충돌 한 마스터가 재시작하지 못할 수 있습니다. 이것은 "새로운 '을 반환하는 것과 같은 추가 조치를 취하기 전에 동기화 상태를 확인해야한다는 것을 의미합니까? – chenwh

+0

마스터에 쓰고 읽어야한다고 생각합니다. 주인이 실패하면, Redis의 전초 부대는 새로운 주인으로 노예를 선출합니다. 그런 다음 새로운 마스터로 전환하여 읽고 쓰기를 할 수 있습니다. 그러나 일부 데이터가 손실 될 수 있습니다. 데이터 손실을 막으려면 다른 데이터베이스를 고려해야합니다. –

답변

0

읽기 - 당신이 추가 조치를 복용하기 전에 가장 최근의 변화에 ​​업데이트 된 노예의 수를 지정할 수 있습니다.

+0

이 문제는 오랫동안 나를 괴롭혔습니다. 도와 줘서 고마워. – chenwh

0

Redis는 비동기 복제를 사용하며 실제로 슬레이브가 주어진 쓰기를 수신했는지 확인할 수 없습니다. 항상 데이터 손실에 대한 창이 나타납니다. WAIT 명령에 대한

Replication Docs

관련 문제