2017-12-27 30 views
0

Redis에는 입력 값을 나타내는 문자열이 있습니다. 우리는 (GUI를 사용하여 사용자가 정의한 후에) 입력 문자열을 기반으로 결과 문자열을 계산하는 동적으로 생성 된 루아 스크립트를 가지고 있습니다. 각 입력 값 세트는 서로 독립적입니다. 따라서 이것은 평행 할 수 있어야하지만 EVAL은 완료 될 때까지 차단 될 것으로 보입니다.병렬로 여러 Redis 값에 대해 단일 Lua 스크립트를 실행하는 방법은 무엇입니까?

Redis에서 스크립트 자체를 다시 작성하지 않고 여러 Lua 스크립트를 실행하는 방법이 있습니까?

답변

1

Redis은 단일 스레드 서버로 구현되었으므로 같은 클라이언트에서 여러 명령을 병렬로 실행할 수 없습니다. 그러나 여러 클라이언트에서 여러 명령 (script 명령 포함)을 실행할 수 있어야하며 Redis는 해당 명령을 IO 루프에 인터리브합니다.

즉, Redis은 초고속 일뿐만 아니라 유연합니다. 다음 옵션 중 하나를 고려하십시오 :

  1. 가하는 레디 스 자신이 모듈 쓰기 명령을 추가하거나의 likings에 새 명령을 추가 할 수 있습니다.
  2. 다중 분할 환경을 고려하십시오. 이렇게하면 각각의 redis-server (또는 샤드)가 독립적으로 실행될 수있게되며, 올바른 샤드로 통화를 보낼 수 있습니다. 이것은 다소 노동 집약적인데, 만약 당신이이 해결책을 고려한다면, 당신이 그 문제에 대해 더 지시 할 수 있음을 알려주십시오.

모두 최고!

+0

흠, 내 행을 인위적으로 조각 낼 필요가있는 것 같습니다. 무언가가 각 행의 sha1을 계산 한 다음 modulus n을 계산합니다. 여기서 n은 내 샤드의 수이고, 적어도 나는 그런 식으로 공유하는로드를 얻습니다. – ArtB

+0

정확 하 게 - 더 정확하게 - _key_의 일부 해싱 함수 항목 (항목의 값을 해시 입력으로 간주하지 않음). 그렇지 않으면 값을 업데이트 할 때 (키, 값) 쌍을 마이그레이션해야 할 수 있습니다. –

+0

또한, 상용으로 제공되는 것뿐만 아니라, 즉시 사용할 수있는 오픈 소스 프록시가 있습니다. –