NOSCRIPT: NOSCRIPT No matching script. Please use EVAL
Redis의미
EVALSHA로 호출한 Lua 스크립트의 SHA1 digest를 서버의 스크립트 캐시에서 찾을 수 없다. Redis가 이 해시에 해당하는 스크립트를 알지 못한다.
원인
서버가 재시작되었거나 SCRIPT FLUSH로 스크립트 캐시가 비워짐, 스크립트가 로드된 적 없음, 또는 페일오버 후 새 노드의 캐시가 비어 있음.
해결 방법
EVAL로 스크립트 전체 본문을 실행하거나(Redis가 자동으로 캐시한다), 먼저 SCRIPT LOAD로 로드한 뒤 반환된 SHA를 EVALSHA에 사용한다. 애플리케이션에서 NOSCRIPT 오류를 잡아 EVALSHA에서 EVAL로 fallback하는 로직을 구현한다. 많은 Redis 클라이언트 라이브러리가 이를 자동으로 수행한다.
같은 데이터베이스의 다른 항목
- CROSSSLOTCROSSSLOT Keys in request don't hash to the same slot
- MOVEDMOVED slot ip:port (클러스터 리다이렉트)
- ASKASK slot ip:port (클러스터 리다이렉트)
- EXECABORTEXECABORT Transaction discarded because of previous errors
- NOPERMNOPERM this user has no permissions to run the command or access one of the keys (명령 실행 또는 키 접근 권한 없음)
- ERR value is not an integer or out of rangeERR value is not an integer or out of range (값이 정수가 아니거나 범위를 벗어남)
- ERR value is not a valid floatERR value is not a valid float (값이 유효한 부동소수점 수가 아님)