먼저 Redis 트랜잭션의 본질을 간략하게 소개하겠습니다.
Redis 트랜잭션의 본질은 일련의 명령입니다. 트랜잭션은 한 번에 여러 명령 실행을 지원하며 트랜잭션의 모든 명령은 직렬화됩니다. 트랜잭션 실행 프로세스 중에 대기열의 명령은 직렬화되어 순서대로 실행되며 다른 클라이언트가 제출한 명령 요청은 트랜잭션 실행 명령 시퀀스에 삽입되지 않습니다.
요약하자면, Redis 트랜잭션은 대기열에 있는 일련의 명령을 일회성, 순차적, 배타적으로 실행하는 것입니다.
Redis 트랜잭션에는 격리 수준 개념이 없습니다.
일괄 작업은 EXEC 명령을 보내기 전에 대기열 캐시에 저장되며 실제로 실행되지 않습니다. 따라서 트랜잭션 내에서 업데이트를 확인하기 위한 쿼리가 없습니다. 트랜잭션 외부에서 쿼리를 볼 수 없습니다.
Redis는 원자성을 보장하지 않습니다.
Redis에서는 단일 명령이 원자적으로 실행되지만 트랜잭션은 원자성을 보장하지 않으며 롤백도 없습니다. 트랜잭션의 명령 중 하나라도 실행이 실패하더라도 나머지 명령은 계속 실행됩니다.
Redis 트랜잭션의 3단계:
트랜잭션 실행 명령 및 대기열 시작
Redis 트랜잭션 관련 명령:
watch key1 key2...: 모니터링되는 키가 트랜잭션 이전에 있는 경우 하나 이상의 키를 모니터링합니다. 실행, 다른 명령에 의해 키가 변경되면 트랜잭션이 중단됩니다(낙관적 잠금과 유사) multi: 트랜잭션 블록의 시작을 표시(대기 중) exec: 모든 트랜잭션 블록의 명령 실행(exec가 실행되면 이전에 추가된 모니터링 잠금이 취소됩니다) Discard: 트랜잭션 취소, 트랜잭션 블록의 모든 명령 취소
Unwatch: Watch의 모든 키 모니터링 취소
Redis 트랜잭션 사용 사례:
(1) 정상 실행
( 2) 트랜잭션 포기 (동영상 공유 학습:redis video tutorial
)(3) EXEC 명령 실행 시 트랜잭션 큐에 명령 오류(Java 컴파일 오류와 유사)가 있는 경우 , all 모든 명령이 실행되지 않습니다
(4) 트랜잭션 대기열에 구문 오류가 있는 경우(Java의 1/0 런타임 예외와 유사) EXEC 명령이 실행될 때 다른 올바른 명령이 실행됩니다. 실행되고 오류가 발생했습니다. 명령에서 예외가 발생했습니다. (5) watch 사용사례 1: watch를 사용하여 잔액 감지, 거래 중에 잔액 데이터가 변경되지 않았으며 거래가 성공적으로 실행되었습니다. Case 2: watch를 사용하여 잔액 감지 , 트랜잭션(표시 1 )을 연 후 새 창에서 주석 2의 작업을 수행하고 잔액 값을 변경하고 트랜잭션 실행 중에 Watch에서 모니터링하는 데이터를 변경하는 다른 클라이언트를 시뮬레이션한 다음 주석 1 이후의 명령을 실행합니다. EXEC를 실행한 후 트랜잭션이 성공적으로 실행되지 않았습니다. 트랜잭션 실행을 시작하기 위해 EXEC가 실행되면 트랜잭션 성공 여부와 관계없이 WARCH의 변수 모니터링이 취소됩니다. 따라서 트랜잭션 실행이 실패하면 WATCH 명령을 다시 실행하여 변수를 모니터링하고 새 트랜잭션을 시작하여 작업해야 합니다.요약:
watch 명령은 트랜잭션이 커밋될 때 watch에서 모니터링하는 여러 KEY 중 하나의 KEY 값이 다른 클라이언트에 의해 변경된 경우 트랜잭션 대기열이 변경되지 않습니다. EXEC를 사용하여 트랜잭션을 실행하고 Nullmulti-bulk 응답을 반환하여 트랜잭션 실행이 실패했음을 호출자에게 알립니다.
관련 권장 사항:
redis 데이터베이스 튜토리얼위 내용은 Redis 트랜잭션 사용 사례 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!