DBAtlas · 데이터베이스 운영 아틀라스

ERR MULTI calls can not be nested: MULTI calls can not be nested

Redis

의미

MULTI(트랜잭션) 블록이 이미 열려 있는 상태에서 MULTI를 다시 보냈다. Redis는 중첩 트랜잭션 블록을 지원하지 않으며 한 번에 하나의 MULTI만 활성화될 수 있다.

원인

애플리케이션 로직이 이전 MULTI를 EXEC/DISCARD로 닫지 않고 새 MULTI를 시작했거나, 커넥션 풀의 같은 연결을 트랜잭션 상태를 제대로 초기화하지 않고 재사용했거나, 라이브러리 래퍼가 모르게 MULTI를 두 번 호출한 경우다.

해결 방법

모든 MULTI 블록을 하나의 EXEC(취소하려면 DISCARD)로 닫고, 이전 블록을 마친 후에만 새 블록을 연다. 코드 흐름에서 트랜잭션 시작/종료를 명확히 구분한다. 연결을 풀에 반환하기 전에 열린 트랜잭션이 없는지 확인한다. 중첩 로직이 필요하면 Lua 스크립트(EVAL)로 원자적 작업을 수행하는 것을 고려한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목