2014-12-16 12 views
0

hiredis C client library을 사용하여 비동기 컨텍스트에서 Redis와 상호 작용합니다.비동기 컨텍스트에서 hiredis sync 명령을 실행하십시오.

내 작업 흐름 중 일부에서 Redis에 대한 동기화 호출을해야하지만 Redis에서 성공적인 응답을받을 수 없습니다.

나는, 내 reply is NULL what is documented as an error condition 내가 문제 비동기 컨텍스트 만에서 레디 스에 동기화 명령 ...

내가이

redisAsyncContext * redis_ctx; 
redisReply * reply; 

// ... 

reply = redisCommand(&(redis_ctx->c), COMMAND); 

redisCommand 후 전화처럼 뭔가를 할 수 있는지 여부를 확실하지 않다 내 redis_ctx->c은 다음과 같습니다.

err = 0 
errstr = '\000' <repeats 127 times> 
fd  = 11 
flags = 2 
obuf = "*5\r\n$4\r\nEVAL\r\n$215\r\n\"math.randomseed(tonumber(ARGV[1])) local keys = redis.call('hkeys',KEYS[1]) if #keys == 0 then return nil end local key = keys[math.random(#keys)] local value = redis.call('hget', KEYS[1], key) return {key, value}\"\r\n$1\r\n1\r\n$0\r\n\r\n$1\r\n1\r\n" 
reader = 0x943730 

나는 그 명령은 발행되었거나 발행되지 않았다.

답변

0

희망이 너무 늦지 않았습니다. Redis에 대해서는별로 전문적이지 않지만, Redis에 대한 Sync 호출이 필요한 경우 왜 AsyncContext를 사용해야합니까?

redisContext에 redisCommand를 사용하면 모든 것이 잘되어 있어야합니다. 이 같은 redisCommand을 사용할 수 있습니다

redisContext *ctx; 

으로 변수 ctx한다고 가정

선언되었습니다

내 포인트는`에서`redisContext` (동기화)를 얻을 수 있습니다 여부
reply = (redisReply *)redisCommand(ctx, "HGET %s %s", hash, key); 
+0

redisAsyncContext' (async)를 실행 한 후'redisCommand' (sync)를 실행합니다. – PauloASilva

+0

'redisAsyncInitialize'를 사용해 보셨습니까? 이것이 당신이하려는 일에 유용 할 지 모르겠습니다. 출처 : [link] (https://github.com/redis/hiredis/blob/master/async.c) –

+0

모든 것이 비동기 컨텍스트/명령에 대해 완벽하게 작동하지만 내 워크 플로의 어느 시점에서 문제를보고 싶습니다. sync 명령을 사용하면 AsyncContext 구조체에서 사용할 수있는 redis sync 컨텍스트가 필요합니다. 비동기 컨텍스트에서 동기화 컨텍스트를 가져올 수 있다면 다른 컨텍스트를 선언하지 않아도됩니다. – PauloASilva