-
반복적인 lua script를 사용한다면 EVAL 대신 EVALSHA 로카테고리 없음 2024. 8. 4. 15:43
EVAL과 EVALSHA는 Redis에서 Lua 스크립트를 실행하는 명령어로, 둘 다 Lua 스크립트를 사용하여 복잡한 로직을 Redis 서버 측에서 실행할 수 있게 해준다.
EVAL vs. EVALSHA 비교
- EVAL (Evaluate):
- EVAL은 Lua 스크립트를 처음부터 Redis 서버로 보내고 실행한다.
- Redis는 EVAL로 받은 스크립트를 실행하기 전에 해당 스크립트를 해시화하고, 캐시에 저장한다.
- 매번 스크립트를 Redis 서버에 전달하고 컴파일해야 하므로 네트워크 및 CPU 리소스가 더 많이 소모된다.
- EVALSHA (Evaluate SHA-1):
- EVALSHA는 이미 Redis 서버에 로드된 Lua 스크립트의 해시(SHA-1) 값을 사용하여 스크립트를 실행한다.
- EVALSHA는 스크립트의 해시를 사용하여 스크립트를 다시 전달하지 않으므로 네트워크 오버헤드가 줄어든다.
- 스크립트의 해시값으로 요청을 보내기 때문에 Redis 서버는 이미 컴파일된 스크립트를 찾아 즉시 실행한다.
- 스크립트를 매번 컴파일할 필요가 없기 때문에 CPU 사용량이 적어지고 성능이 개선된다.
성능과 CPU 측면에서의 차이점
- 네트워크 효율성:
- EVAL은 스크립트를 매번 서버에 전달하므로 네트워크 트래픽이 증가한다.
- EVALSHA는 SHA-1 해시값만 전달하므로 네트워크 오버헤드가 크게 줄어든다.
- CPU 효율성:
- EVAL은 매번 스크립트를 파싱하고 컴파일해야 하므로 CPU 리소스를 더 많이 사용한다.
- EVALSHA는 이미 컴파일된 스크립트를 실행하므로 CPU 사용량이 낮.
- 속도 개선:
- EVALSHA는 기존의 컴파일된 스크립트를 재사용하므로 실행 속도가 EVAL에 비해 더 빠르다. 이 차이는 특히 반복적인 Lua 스크립트 실행에서 두드러진다.
- 캐시 효과:
- EVALSHA는 Redis 서버의 스크립트 캐시를 적극 활용하므로 동일한 스크립트를 여러 번 실행할 때 성능 향상이 크다.
반복적으로 동일한 Lua 스크립트를 실행해야 하는 상황에서는 EVALSHA가 훨씬 더 효율적이라고 볼 수 있을 것 같다. EVALSHA를 사용하면 스크립트를 처음 한 번만 로드하고, 이후에는 해당 스크립트의 SHA-1 해시값만 사용하여 실행하기 때문에 네트워크 트래픽이 줄고 CPU 리소스도 절약할 수 있다.
- EVAL (Evaluate):