Я пытаюсь написать пул соединений с помощью hiredis
,
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь запускает команду и не читает ответ от соединения, я должен очистить ответ от этого соединения перед помещением в пул соединений.
Есть ли способ проверить:
redisGetReply
До тех пор, пока все данные не будут очищены. Вопрос не ясен, поскольку в нем не указано, используете ли вы синхронизирующие или асинхронные операции.
Вы упомянули redisGetReply, я бы предположил использование операций синхронизации. Синхронизация звонков будет блокировать звонки. Ответ на команды будет доступен в том же вызове. Сценарий, в котором вы можете захотеть проверить, все ли данные прочитаны, — это когда контекст разделяется между потоками, и вы проверяете данные перед возвратом соединения в пул.
Да, redisGetReply можно использовать для проверки наличия данных для чтения.
Для асинхронных вызовов используйте redisAsyncHandleRead, чтобы проверить, есть ли данные для чтения.
Внутренне и redisGetReply, и redisAsyncHandleRead выполняют вызов redisBufferRead.
Других решений пока нет …