hired запускает команду Sync из контекста Async

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

В какой-то момент моего рабочего процесса мне нужно сделать Sync-вызов 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

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

1 ответ

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

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

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

redisContext *ctx;

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

reply = (redisReply *)redisCommand(ctx, "HGET %s %s", hash, key);
Другие вопросы по тегам