2014-06-12 2 views
2

나는 여러개의 루아 스크립트를 하나씩 실행시키고 싶다. 그 사이에 어떤 명령도 허용하지 않고있다. 또한 첫 번째 스크립트의 결과를 두 번째 스크립트에 전달해야합니다.Redis의 스크립트에서 스크립트를 호출하려면 어떻게해야합니까?

모든 스크립트를 하나의 파일에 저장하여 일시적으로 문제를 해결했습니다. 그러나 두 번째 스크립트는 첫 번째 스크립트에서 반환 한 키를 수정합니다. 이 때문에 두 번째 스크립트에서 사용하는 모든 키가 KEYS 배열을 사용하여 전달되어야하므로 모든 파일을 한 파일에 저장하면 EVAL 명령 의미 체계를 위반하게됩니다.

답변

8

실제로 가능합니다. Redis는이를 수행 할 수있는 문서화되지 않은 기능이 있습니다. 기본 전제 조건은 스크립트를 EVAL 또는 SCRIPT LOAD 한 후에는 f_<sha1 hash> 함수를 호출하여 다른 스크립트에서 호출 할 수 있다는 것입니다 (여기서 sha1 hash은 첫 번째 스크립트의 SHA1 해시 임).

이것에 대한 크레딧은 Josiah Carlson에게 돌아갑니다 (누가 Nathan Fritz에게 크레딧을 주 었는지). Josiah 박사는 here (이 파일은 다른 스크립트를 호출하는 Lua 스크립트 관리에 도움이되는 Python 패키지의 일부입니다)에 모든 세부 정보를 제공 할만큼 친절했습니다.

+0

우, 그렇게 설명하는 것보다 훨씬 어려워요. 그렇게하지 않으면 훨씬 더 효율적입니다. 나는 루디스에서'루아 '하지 않을 것입니다. 하지만 그렇게해야합니다. – NappingRabbit

+0

@NappingRabbit - 문서화되지 않았 음을 의미하거나 사용되어서는 안됩니다 :) 무엇을하려고합니까? 또는 그 이유는 무엇입니까? –

+0

지난 10 시간 동안 캡슐화를 실제로 다시 생각했습니다. ㅎ. 나는 객체 지향적 인 방법으로 루아를 사용하여 객체를 만들고 싶었다. 걱정할 필요가 없습니다. 응답 주셔서 감사합니다. – NappingRabbit

-1

당신은 그렇게 할 수 없습니다. 그러나 Redis Cluster를 사용하지 않는 한 EVAL 의미를 위반하면 문제가되지 않습니다.

+0

Redis Cluster가 어딘가에있을 수도 있습니다. – kryo

+0

제 대답을 참조하십시오. 실제로 스크립트에서 스크립트를 호출하는 것이 가능합니다. –

관련 문제