0

非同期コンテキストで Redis と対話するために、 hiredis C クライアント ライブラリを使用しています。

ワークフローのある時点で、Redis に Sync 呼び出しを行う必要がありますが、Redis から正常な応答を得ることができません。

非同期コンテキストからRedisに同期コマンドを発行できるかどうかはわかりませんが...

私はこのようなものを持っています

redisAsyncContext * redis_ctx;
redisReply * reply;

// ...

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

redisCommand呼び出しの後reply、エラー状態として文書化されているものは NULL であり、myredis_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

コマンドが発行されたかどうかはわかりません。

4

1 に答える 1

0

手遅れではないことを願っています。私は Redis の専門家ではありませんが、Redis に対して Sync 呼び出しを行う必要がある場合、なぜ AsyncContext を使用するのでしょうか?

redisContext で redisCommand を使用するだけであれば、すべて問題ありません。

変数が次ctxのように宣言されていると仮定します

redisContext *ctx;

redisCommand次のように使用できます。

reply = (redisReply *)redisCommand(ctx, "HGET %s %s", hash, key);
于 2015-01-26T23:07:59.203 に答える