2013-06-25 4 views
4

Redis와 함께 사용되는 루아에서는 많은 수를 처리해야합니다.Redis Lua에서 큰 숫자를 정밀하게 처리하십시오.

require"bc" 
bc.mul(...) 
bc.mod(...) 

등 을하지만 불행하게도 레디 스 루아는 "필요"를 지원하지 않습니다 : 일반적으로 당신은 그런 식으로 할 것. 내가 찾은 유일한 접근법은 lua 자체로 작성된 많은 수의 라이브러리를 스크립트에 직접 삽입하는 것이다. oss.digirati.com.br/luabignum/index.htm

나는 구체적인 스크립트의 목적을 위해 라이브러리를 제거 할 수 있지만 여전히 거대한 남아 :

유일한 같은 라이브러리 나는 내 손에 얻을 수 있습니다. Redis Lua에서 많은 수를 효율적으로 처리 할 수있는 방법이 있습니까?

갱신 1 : 나는 키에 전체 라이브러리를 저장하고 액세스하는 경우이 좋아하는 것 :

local BigNumLib = KEYS[1]; 
BigNumLib.BigNum.mul(KEYS[2],KEYS[3]); 

내가 구문 모르겠어요 아마도 나는 모든 라이브러리를 동봉해야합니다 루아 테이블 {}.

+0

Redis 소스 코드 자체를 조정하는 것 외에는 여기에 편리한 해결책이 없다고 생각합니다. –

답변

1

Redis에서 Lua 코드를 처리하는 방법에 익숙하지 않지만 라이브러리 자체를 코드에 삽입하는 것이 왜 문제가됩니까? 당신이 뭔가를 할 수 있어야한다 :

local bc = function() 
    -- insert the code of BigNum.lua here 
    return BigNum 
end 
bc.mul(....) 

코드는 아마 루아 5.1 전에 기록 된, 그래서 호환성 문제가있는 경우는 모르겠지만,이 적어도 당신에게 시작을 제공해야합니다.

+0

라이브러리가있는 모든 요청이 25KB가되기 때문에 문제가 발생합니다. – MidnightCoder

+1

EVALSHA를 사용할 수 있으므로 반드시 그렇지는 않습니다. 첫 번째 요청은 25KB이고 다음 바이트는 몇 바이트 만됩니다. 대역폭을 약간 절약 할 수 있습니다. 그러나 루아 엔진은 매번 실행할 때마다 25KB의 데이터를 해석해야합니다. –

+0

@MidnightCoder를 사용하면 필요한 메서드 만 남겨두고 코드를자를 수 있습니다. –

관련 문제