2014-03-03 5 views
2

데이터베이스를 채울 때 클라이언트 파이프 라이닝을 활용하고 싶습니다. perl Redis client을 사용하여 어떻게하면됩니까?Redis 파이프 라이닝

use Redis; 

my $redis = Redis->new or die "No redis server"; 

$redis->multi; 
for my $i (1 .. 20000) { 

    $redis->set("key.$i" => "foo" x500); 
} 
$redis->exec; 

답변

1

documentationset 세 번째 인수로 코드 참조를 추가해야했다. 대신, 빈 하위의

for my $i (1 .. 20000) { 
    $redis->set("key.$i" => "foo" x500, sub {}); 
} 

을 :

는로 예를 켤 것이다 명령 메서드 호출

에 마지막 인수로 코드 참조 인수를 추가, 파이프 라이닝을 사용하려면 실제로 응답을 할 수 있습니다 :

파이프 라인 명령 메서드에 제공하는 코드화 코드는 다음과 같습니다. 한 번 호출 된 응답을 사용할 수 있습니다. $ reply와 $ error라는 두 개의 인수가 필요합니다. $ error가 정의 된 경우Redis 서버에서 보낸 오류 응답 텍스트가 포함됩니다. 그렇지 않은 경우, $ reply는 오류가없는 응답입니다. 거의 모든 명령의 경우 이는 undef이거나 정의되었지만 참조가 아닌 스칼라 또는 그 중 하나의 배열 참조를 의미합니다. "keys", "info"및 "exec"를 참조하십시오.

또한 문서의 transaction handling 부분에 말한다 :

경고 : 파이프 라인과 결합 될 때 여전히 논의하고, 동시에 그것들을 사용하지 말아야 이러한 명령의 동작 단지 지금.

+0

하지만 이미이 모든 것을 읽고 다른 것을 찾고있는 느낌이 들었습니다. – simbabque

+0

답장을 보내고 싶습니다. 예, 읽었습니다. 조금 혼란스러워 보입니다. 따라서 파이프 라이닝시 트랜잭션을 삭제해야한다고 제안합니다. 나를 귀찮게하는 또 다른 일 (얼마나 오래 파이프 라인이 있고 걱정해야합니까?) (http://stackoverflow.com/a/16710211/223226)? –

+0

그 링크 대답은 매우 흥미 롭습니다. 당신이 무엇을하려고하는지 잘 모르겠다. 한 번에 얼마나 많은 데이터를 넣을지주의해야합니다. 그러나 저는 그것이 상자의 힘에 크게 의존한다고 생각합니다. 그들은 6MB의 데이터에 대해 이야기하고 있습니다. 내 설치 프로그램은 네트워크를 통해 내부적으로 보내는 경우에도 거의 아무것도 아닙니다. 그래서 우리는 당신이해야 할 일의 상황을 봐야한다고 말하고 싶습니다. 그러나 나는 동의한다, 그것은 당신이 거래를해서는 안된다고 말한다. 파이프 라인은 어쨌든 트랜잭션과 매우 유사합니다. 그렇지 않습니까? 차이점은 명령이 수집되는 곳입니다. – simbabque

관련 문제