【问题标题】:[hiredis]Multiple hincrbys only return one result(REDIS_REPLY_INTEGER)[hiredis]多个hincrbys只返回一个结果(REDIS_REPLY_INTEGER)
【发布时间】:2022-11-29 12:05:21
【问题描述】:

使用hiredis时,使用redisAppendCommand放多个hincrby命令,redisGetReply的reply->type结果为REDIS_REPLY_INTEGER,只返回其中一个结果。
但是当我使用 hmget 时,reply->type 的结果是 REDIS_REPLY_ARRAY。

【问题讨论】:

  • 使用 redisAppendCommand 放置多个 hincrby 命令: 你的意思是多次调用 redisAppendCommand 发送多个 hincrby 命令?
  • @for_stack 是的,这就是我的意思。

标签: c++ redis hiredis


【解决方案1】:

由于您多次拨打redisAppendCommand,您应该拨打redisGetReply相同的次数以获得所有回复。对于每个回复,它的类型都是REDIS_REPLY_INTEGER。因为hincrby的回复类型是整型,也就是数组类型。

hmget的回复类型是数组回复,所以会得到REDIS_REPLY_ARRAY

由于您使用 c++ 标记问​​题,您可以尝试 redis-plus-plus,这是一个用户友好的 Redis C++ 客户端,您不需要手动解析回复:

auto r = sw::redis::Redis("tcp://127.0.0.1:6379");
for (auto idx = 0; idx < 5; ++idx) {
    r.hincrby("key", "field", 1);
}
std::vector<std::string> fields = {"f1", "f2"};
std::vector<std::optinal<std::string>> vals;
r.hmget("key", fields.begin(), fields.end(), std::back_inserter(vals));

免责声明:我是 redis-plus-plus 的作者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2016-05-23
    • 2017-01-03
    相关资源
    最近更新 更多