redis 디자인 및 구현 책 내용:
Redis 트랜잭션은 항상 ACID에서 원자성, 일관성 및 격리성을 갖습니다. 서버가 AOF
지속성 모드에서 실행되고appendfsync 옵션의 값이 항상 있는 경우 트랜잭션에도 내구성이 있습니다.
온라인 정보를 읽을 수 있으며, Redis 트랜잭션은 원자성과 내구성을 충족하지 못한다고 합니다.
redis 트랜잭션에서 특정 명령이 실행되지 않으면 후속 명령이 계속 실행되며 자동으로 롤백되지 않습니다.
AOF의 "Always SYNC" 모드에서는 트랜잭션의 각 명령이 성공적으로 실행된 후 fsync 또는 fdatasync가 즉시 호출되어 트랜잭션 데이터를 AOF 파일에 씁니다.
그러나 이러한 종류의 저장은 백그라운드 스레드에 의해 수행되며 저장이 성공할 때까지 메인 스레드가 차단되지 않으므로 명령의 성공적인 실행과 데이터 저장 사이에는 여전히 아주 작은 간격이 있습니다. 하드 디스크에 저장되므로 이 모드에서는 트랜잭션도 내구성이 없습니다.
대답해주세요~~
이것은 주로 Redis의 원자성에 대한 의구심 때문입니다. 이제 Redis가 트랜잭션에서 명령 실행이 실패하면 롤백되지 않는 것으로 확인되었습니다.
우선 Redis는 단일 스레드이므로 mutil을 사용하여 일련의 명령을 수동으로 캡슐화하여 전체적으로 실행하지 않는 한 트랜잭션 개념이 없습니다. 롤백됩니까? 직접 테스트해 볼 수 있습니다.
단일 스레드이므로 각 명령은 원자적입니다. Redis 트랜잭션은 명령 그룹을 함께 캡슐화하여 실행되므로 명령 실행과 관련하여 다른 명령을 차단하므로 격리됩니다. 일관성, 위에서 수행한 테스트가 롤백되면 일관성이 없는 것입니다.