Lua 스크립트 - Amazon ElastiCache

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Lua 스크립트

Valkey 및 Redis는 Lua 스크립트를 실행하는 명령을 포함하여 200개 이상의 명령을 OSS 지원합니다. 그러나 Lua 스크립트의 경우 Valkey 또는 Redis 의 메모리 및 가용성에 영향을 미칠 수 있는 몇 가지 위험이 있습니다OSS.

파라미터화되지 않은 Lua 스크립트

각 Lua 스크립트는 실행되기 전에 Valkey 또는 Redis OSS 서버에 캐시됩니다. 파라미터화되지 않은 Lua 스크립트는 고유하므로 Valkey 또는 Redis OSS 서버가 많은 수의 Lua 스크립트를 저장하고 더 많은 메모리를 소비할 수 있습니다. 이를 완화하려면 모든 Lua 스크립트에 파라미터가 지정되고 필요한 경우 정기적으로 캐시된 Lua 스크립트를 정리SCRIPTFLUSH해야 합니다.

다음 예제는 파라미터화된 스크립트를 사용하는 방법을 보여 줍니다. 먼저 3개의 캐시된 Lua 스크립트가 생성되는 파라미터화되지 않은 접근 방식의 예제가 있으며 이 방식은 권장하지 않습니다.

eval "return redis.call('set','key1','1')" 0 eval "return redis.call('set','key2','2')" 0 eval "return redis.call('set','key3','3')" 0

대신 다음 패턴을 사용하여 전달된 파라미터를 사용할 수 있는 단일 스크립트를 생성합니다.

eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key1 1 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key2 2 eval "return redis.call('set',KEYS[1],ARGV[1])" 1 key3 3

장기 실행 Lua 스크립트

Lua 스크립트는 원자적으로 여러 명령을 실행할 수 있으므로 일반 Valkey 또는 Redis OSS 명령보다 완료하는 데 시간이 더 걸릴 수 있습니다. Lua 스크립트가 읽기 전용 작업만 실행하는 경우 중간에 중지할 수 있습니다. 하지만 Lua 스크립트는 쓰기 작업을 수행하는 즉시 종료할 수 없으므로 실행을 완료해야 합니다. 장기 실행 중인 Lua 스크립트를 변경하면 Valkey 또는 Redis OSS 서버가 장기간 응답하지 않을 수 있습니다. 이 문제를 완화하려면 장기 실행 Lua 스크립트를 사용하지 말고 사전 프로덕션 환경에서 스크립트를 테스트해 보세요.

Stealth 쓰기 기능이 있는 Lua 스크립트

Valkey 또는 Redis가 를 초과OSS하더라도 Lua 스크립트OSS가 Valkey 또는 Redis에 새 데이터를 계속 쓸 수 있는 몇 가지 방법이 있습니다maxmemory.

  • 스크립트는 Valkey 또는 Redis OSS 서버가 미만일 때 시작maxmemory되며 내부에 여러 쓰기 작업이 포함되어 있습니다.

  • 스크립트의 첫 번째 쓰기 명령은 메모리를 소비하지 않으며(예: DEL) 메모리를 소비하는 쓰기 작업이 더 많음

  • 이외의 Valkey 또는 Redis OSS 서버에서 적절한 제거 정책을 구성하여 이 문제를 완화할 수 있습니다noeviction. 이렇게 하면 RedisOSS가 항목을 제거하고 Lua 스크립트 간에 메모리를 확보할 수 있습니다.