반응형
레디스와 루아(Lua)에 대해서 알아볼께요^^;
- 레디스 2.6버전에 처음으로 루아 스크립트 엔진이 추가되었음.
- 다시말해서, Redis 서버에서 루아(Lua) 스크립트를 실행할 수 있게됨.
레디스에서 루아 스크립트를 사용했을때 장점은?
- 사용자가 마음대로 새로운 명령을 생성할 수 있음.
- 생성한 명령은 Redis의 일반 명령과 동일한 수준의 트랜잭션과 실행 특징을 보장받을 수 있다고함.
- 위의 특징은 장점이자 큰 단점이 될 수 도 있음.
- 즉, 사용자가 작성한 스크립트가 실행되는 동안에는 다른 Redis 명령이 실행되지 못하므로 작성한 스크립트는 반드시 실행 시간에 대한 고려를 포함해야함
- 위의 특징은 장점이자 큰 단점이 될 수 도 있음.
레디스에서 수행되는 루아 스크립트의 특징은?
- Redis에서 루아 스크립트를 실행할 때 스크립트에 대한 인수를 입력할 수 있음.
- 루아 스크립트에서 Redis 명령을 사용할 수 있음.
- Redis 서버에서 실행되는 루아 스크립트는 원자적으로 처리됨.
그럼, 레디스에서 루아를 실행해 볼께요 ^^;
- 루아 스크립트를 실행하는 방법 2가지
- 첫번째, 단일 실행
- EVAL 명령을 사용하여 수행하고자 하는 루아 스크립트를 매번 Redis 로 전송하는 것.
- 이 방법은 간단한 스크립트를 작성하고 사용하는데 최적화
- but, 수행된 스크립트는 바로 버려지므로, 다음에 똑같은 스크립트를 실행하고자할때는, 다시 동일한 스크립트를 수행해야되는 단점이 존재함.
- EVAL 명령을 사용하여 수행하고자 하는 루아 스크립트를 매번 Redis 로 전송하는 것.
- 두번째, 스크립트 등록 실행
- SCRIPT LOAD 명령을 사용하여 수행할 스크립트를 Redis 서버에 미리 등록해 두는 것.
- SCRIPT LOAD 명령을 실행하면, 해당 스크립트에 대한 sha1 문자열을 생성함.
- 생성된 sha1 문자열은 EVALSHA 명령으로 실행 가능함.
- 즉, 다시 동일한 스크립트를 전송할 필요가 없음.
- 생성된 sha1 문자열은 EVALSHA 명령으로 실행 가능함.
- 즉, 반복되거나 재사용이 필요한 명령은 SCRIPT LOAD로 Redis 서버에 미리 등록해 두는 것이 좋음.
- SCRIPT LOAD 명령을 실행하면, 해당 스크립트에 대한 sha1 문자열을 생성함.
- SCRIPT LOAD 명령을 사용하여 수행할 스크립트를 Redis 서버에 미리 등록해 두는 것.
- 첫번째, 단일 실행
그럼, 단일실행(EVAL) 과 스크립트 등록 실행(SCRIPT LOAD / EVALSHA) 명령에 대해서 알아볼께요.
- 단일실행
- EVAL
- 구문
- redis> EVAL lua_script numkeys key [key ...] arg [arg ...]
- 예시
- 실행할 Lua 스크립트
- 구문
- EVAL
실행할 EVAL 명령
redis> eval "local sum = ARGV[1] + ARGV[2] local res = redis.call('SET', KEYS[1], sum) return res" 1 thub_test:key 1000 2000
- 설명
- ARGV 변수와 KEYS 변수는 각각 스크립트 인수와 Redis 의 Key 에 해당됨.
- 루아(Lua) 스크립트는 C++ / JAVA와 같이 명령의 종료를 구분하기 위해서 특별한 구분자를 사용하지 않음.
- 즉, 단순히 공백 문자를 사용하여 명령과 명령을 구분함.
- 실행결과
- 스크립트 등록 실행
- SCRIPT LOAD
- 구문
- redis> SCRIPT LOAD lua_script
- 예시
- 실행할 SCRIPT LOAD 명령
- 구문
- SCRIPT LOAD
redis> script load "local sum = ARGV[1] + ARGV[2] local res = redis.call('SET', KEYS[1], sum) return res"
- 실행결과
-
- 설명
- script load 명령으로 Redis 서버에 루아(Lua) 스크립트를 저장하고 저장된 루아 스크립트에 대한 sha1 키값을 생성함.
- 설명
-
- EVALSHA
- 구문
- redis> EVALSHA sha1 numkeys key [key ...] arg [arg ...]
- 예시
- 실행할 EVALSHA 명령
- 구문
redis> evalsha d8f846826ead0d8efed3ebd5515499de6becbe8b 1 thub_test_evalsha:key 300 500
- 실행결과
-
- 설명
- 위의 결과와 같이 script load 명령 후 반환된 sha1 값을 가지고 실행시킬 수 있음을 확인해보았음.
- 설명
-
결론
- 레디스에서 루아 스크립트를 사용해서 단일 실행 및 스크립트 등록 실행을 할 수 있음.
- 레디스 개발자가 마음대로 루아(Lua) 스크립트를 사용해서 새로운 명령을 생성할 수 있음.
- 오늘도 레디스 관련 루아(Lua) 스크립트 사용에 대한 마술(?) 한가지 획득완료, 감사합니다. ^^
728x90
300x250
'좋아하는 것_매직IT > 9.redis' 카테고리의 다른 글
Spring Boot에서 Redis 캐시 매니저를 사용하여 MySQL 데이터베이스 변경 시 실시간으로 적용하는방법 (0) | 2023.03.15 |
---|---|
34.Redis, 레디스의 AOF(Append Only File)에 대해서 알아보자구요! ^^ (0) | 2021.01.15 |
33.Redis, 레디스의 스냅샷에 대해서 알아보자구요! ^^ (0) | 2021.01.15 |
32.Redis, 레디스 설정(redis.conf) 에 대해서 알아보자구요.^^ (0) | 2021.01.15 |
31.Redis, 운영 시 메모리 설정은 어떻게 해야 할까요? (0) | 2021.01.15 |