hiredis, как проверить, доступно ли больше данных для чтения

Я пытаюсь написать пул соединений с помощью hiredis,
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь запускает команду и не читает ответ от соединения, я должен очистить ответ от этого соединения перед помещением в пул соединений.

Есть ли способ проверить:

  1. Есть ли еще данные для чтения? Так что я могу сделать redisGetReply До тех пор, пока все данные не будут очищены.
  2. Или есть способ очистить все ожидающие чтения на объекте подключения?

0

Решение

Вопрос не ясен, поскольку в нем не указано, используете ли вы синхронизирующие или асинхронные операции.

  • Вы упомянули redisGetReply, я бы предположил использование операций синхронизации. Синхронизация звонков будет блокировать звонки. Ответ на команды будет доступен в том же вызове. Сценарий, в котором вы можете захотеть проверить, все ли данные прочитаны, — это когда контекст разделяется между потоками, и вы проверяете данные перед возвратом соединения в пул.

    Да, redisGetReply можно использовать для проверки наличия данных для чтения.

    Для асинхронных вызовов используйте redisAsyncHandleRead, чтобы проверить, есть ли данные для чтения.

Внутренне и redisGetReply, и redisAsyncHandleRead выполняют вызов redisBufferRead.

  • Для синхронизации вызовов используйте redisFree для очистки контекста.
    Для вызовов Aysnc используйте redisAsyncFree для очистки контекста.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]