наемный запуск команды синхронизации из асинхронного контекста

Я использую клиентскую библиотеку Hiredis C для взаимодействия с Redis в асинхронном контексте.

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

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

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

redisAsyncContext * redis_ctx;
redisReply * reply;

// ...

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

После вызова redisCommand мой reply равен NULL, что задокументировано как ошибка, а мой 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

Я не могу понять, была ли дана команда или нет.


person PauloASilva    schedule 16.12.2014    source источник


Ответы (1)


Надеюсь, еще не поздно. Я не очень разбираюсь в Redis, но если вам нужно сделать синхронный вызов Redis, зачем вам использовать AsyncContext?

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

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

redisContext *ctx;

вы можете использовать redisCommand следующим образом:

reply = (redisReply *)redisCommand(ctx, "HGET %s %s", hash, key);
person Matteo Sticco    schedule 26.01.2015
comment
Я хочу сказать, можно ли получить redisContext (синхронизация) из redisAsyncContext (асинхронно), а затем выдать redisCommand (синхронизация). - person PauloASilva; 27.01.2015
comment
Вы пытались использовать redisAsyncInitialize? Я не уверен, что это может быть полезно для того, что вы пытаетесь сделать. Источник: ссылка - person Matteo Sticco; 28.01.2015
comment
все отлично работает с асинхронным контекстом/командами, но в какой-то момент моего рабочего процесса я хочу выполнить команду синхронизации, для которой требуется контекст синхронизации redis, который доступен в структуре AsyncContext. Если бы можно было получить контекст синхронизации из асинхронного, я мог бы избежать объявления другого контекста. - person PauloASilva; 29.01.2015