hiredis,如何检查是否有更多数据可供阅读

时间:2013-07-13 12:50:50

标签: c++ redis hiredis

我正在尝试使用hiredis编写连接池。 我面临的问题是,如果用户触发命令并且没有从连接中读取响应,我应该在放入连接池之前清除该连接的响应。

有没有办法检查:

  1. 是否有更多数据需要阅读?所以我可以做redisGetReply,直到所有数据都被清除。
  2. 或者有没有办法清除连接对象上的所有挂起读取?

1 个答案:

答案 0 :(得分:0)

问题不明确,因为它未能说明您是使用同步还是异步操作。

  • 你提到redisGetReply,我会假设使用同步操作。同步通话将阻止通话。对命令的响应将在同一个调用中可用。您可能想要检查是否读取所有数据的方案是在线程之间共享上下文并在返回到池的连接之前检查数据。

    是的redisGetReply可用于检查是否有更多数据需要阅读。

    对于异步调用,请使用redisAsyncHandleRead检查是否有要读取的数据。

redisGetReply和redisAsyncHandleRead都在内部调用redisBufferRead。

  • 对于同步调用,请使用redisFree清除上下文。 对于Aysnc调用,使用redisAsyncFree清除上下文。