我使用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
我无法弄清楚命令是否已发出。
答案 0 :(得分:0)
希望现在还为时不晚。我对Redis不太熟悉,但如果您需要对Redis进行同步调用,为什么要使用AsyncContext?
如果你只使用redisCommand和redisContext,一切都会好的。
假设变量ctx
已声明为
redisContext *ctx;
您可以像这样使用redisCommand
:
reply = (redisReply *)redisCommand(ctx, "HGET %s %s", hash, key);