2014-12-16 3 views
0

Я использую hiredis C client library для взаимодействия с Redis в асинхронном контексте.hiredis запустить команду синхронизации из Async Context

В какой-то момент моего рабочего процесса я должен сделать вызов Sync для Redis, но я не могу получить успешный ответ от Redis.

Я не уверен, могу ли я вопрос синхронизации команда Redis из контекста асинхронном но ...

У меня есть что-то вроде этого

redisAsyncContext * redis_ctx; 
redisReply * reply; 

// ... 

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

После redisCommand вызова, мой reply is NULL what is documented as an error condition и мой 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, но если вам нужно сделать вызов Sync для Redis, зачем использовать AsyncContext?

Если вы просто используете redisCommand с redisContext, все должно быть хорошо.

Предполагая, что переменная ctx была объявлена ​​

redisContext *ctx; 

вы можете использовать redisCommand так:

reply = (redisReply *)redisCommand(ctx, "HGET %s %s", hash, key); 
+0

Моя точка зрения заключается в том, можно ли получить 'redisContext' (синхронизации) от' redisAsyncContext' (async), а затем выпустить команду redisCommand (sync). – PauloASilva

+0

Вы пытались использовать 'redisAsyncInitialize'? Я не уверен, что это может быть полезно для того, что вы пытаетесь сделать. Источник: [link] (https://github.com/redis/hiredis/blob/master/async.c) –

+0

все отлично работает над асинхронным контекстом/командами, но в какой-то момент моего рабочего процесса я хочу опубликовать команда синхронизации, для которой требуется контекст синхронизации redis, который доступен в структуре AsyncContext. Если бы можно было получить контекст синхронизации из асинхронного, я мог бы избежать объявления другого контекста – PauloASilva