ERR DISCARD without MULTI: DISCARD without MULTI
Redis의미
열린 MULTI 블록이 없는 상태에서 DISCARD를 보냈다. DISCARD는 진행 중인 트랜잭션을 취소할 때만 사용하며, 취소할 것이 없으면 이 오류를 반환한다.
원인
MULTI 없이 DISCARD를 호출했거나, 트랜잭션이 이미 EXEC/DISCARD로 닫힌 후 다시 호출했거나, 오류 처리 코드에서 무조건 DISCARD를 호출했거나, 연결 상태가 예상과 다른 경우다(풀에서 가져온 연결에 MULTI가 열려 있지 않음).
해결 방법
실제로 MULTI가 열려 있을 때만 DISCARD를 호출하고 코드에서 트랜잭션 상태를 추적한다. 오류 핸들러에서는 DISCARD 호출 전에 트랜잭션이 열려 있는지 확인한다. 라이브러리의 트랜잭션 래퍼를 사용해 상태를 자동으로 관리한다. 커넥션 풀의 상태가 깨끗하도록 보장한다.
같은 데이터베이스의 다른 항목
- ERR Lua script attempted to access nonexistent global variableLua script attempted to access a nonexistent global variable (Lua 스크립트가 존재하지 않는 전역 변수에 접근)
- ERR unknown commandUnknown command
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster) (slot rehashing 중 다중 키 요청)
- BUSYGROUP Consumer Group name already existsConsumer group already exists
- NOGROUP No such key or consumer groupNo such key or consumer group in stream
- NOTBUSY No scripts in execution right nowNo scripts in execution right now
- DENIED Redis is running in protected modeRedis is running in protected mode