hiredis从Async Context运行Sync命令

时间:2014-12-16 17:10:09

标签: asynchronous redis eval sync hiredis

我使用hiredis C client library在异步上下文中与Redis进行交互。

在我的工作流程的某些方面,我必须与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

我无法弄清楚命令是否已发出。

1 个答案:

答案 0 :(得分:0)

希望现在还为时不晚。我对Redis不太熟悉,但如果您需要对Redis进行同步调用,为什么要使用AsyncContext?

如果你只使用redisCommand和redisContext,一切都会好的。

假设变量ctx已声明为

redisContext *ctx;

您可以像这样使用redisCommand

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