작업의 원자성으로 인해 작업이 다시 분할될 수 없으며 완전히 실행되거나 완전히 실행되지 않습니다.
운영 체제의 원자 원리를 배워야 합니다. 시간이 조금 길어서 정확하지 않을 수도 있습니다. Redis와 관련이 없는 일반적인 예를 들어보겠습니다.
A=10이라는 변수가 있는데 여기에 5를 더하고 싶습니다. 그런 다음 "5 추가" 작업은 여러 단계로 나뉩니다.
A 읽기
결과 읽기 +5
결과가 A에 다시 기록됩니다
여기에 3을 더하고 싶은 사람이 있는데, 그 사람은 내가 A 변수를 조작하고 싶어 한다는 사실을 모릅니다. 그의 "3 더하기" 작업은 여러 단계로 나누어야 합니다.
A 읽기
결과 읽기 +3
결과가 A에 다시 기록됩니다
우리 작업("Add 3" 및 "Add 5")이 원자적이지 않으면 서로 간의 명령이 무작위로 정렬되어 결과를 예측할 수 없게 됩니다. 아마도 그가 +3의 쓰기 저장을 먼저 읽었을 것입니다. 시간은 이미 13이었으므로 +3과 +5라는 올바른 결과를 얻었습니다. +3 작업 중에 그가 답장을 하지 않았을 수도 있습니다. 제가 우연히 10을 읽었으므로 답장을 하면 13 또는 15가 될 수도 있습니다.
우리 작업이 원자적이라면 그가 3을 더하는 단계를 수행할 때 내가 그것을 삽입할 수 없다는 것을 보장할 수 있습니다. 나는 그가 작업을 완료한 후에만 작업을 시작할 수 있으므로 데이터의 신뢰성이 보장됩니다.
작업의 원자성으로 인해 작업이 다시 분할될 수 없으며 완전히 실행되거나 완전히 실행되지 않습니다.
운영 체제의 원자 원리를 배워야 합니다. 시간이 조금 길어서 정확하지 않을 수도 있습니다. Redis와 관련이 없는 일반적인 예를 들어보겠습니다.
A=10이라는 변수가 있는데 여기에 5를 더하고 싶습니다. 그런 다음 "5 추가" 작업은 여러 단계로 나뉩니다.
여기에 3을 더하고 싶은 사람이 있는데, 그 사람은 내가 A 변수를 조작하고 싶어 한다는 사실을 모릅니다. 그의 "3 더하기" 작업은 여러 단계로 나누어야 합니다.
우리 작업("Add 3" 및 "Add 5")이 원자적이지 않으면 서로 간의 명령이 무작위로 정렬되어 결과를 예측할 수 없게 됩니다. 아마도 그가 +3의 쓰기 저장을 먼저 읽었을 것입니다. 시간은 이미 13이었으므로 +3과 +5라는 올바른 결과를 얻었습니다. +3 작업 중에 그가 답장을 하지 않았을 수도 있습니다. 제가 우연히 10을 읽었으므로 답장을 하면 13 또는 15가 될 수도 있습니다.
우리 작업이 원자적이라면 그가 3을 더하는 단계를 수행할 때 내가 그것을 삽입할 수 없다는 것을 보장할 수 있습니다. 나는 그가 작업을 완료한 후에만 작업을 시작할 수 있으므로 데이터의 신뢰성이 보장됩니다.
데이터베이스 트랜잭션과 유사하게 일련의 작업이 성공하거나 전혀 실행되지 않습니다.
하고 싶으면 다 하고, 하기 싫으면 하지 마세요