Pipeline не ожидает вашего подтверждения для отправки пакета в Redis.Документация гласит:
Иногда вам нужно отправить кучу разных команд.Очень крутой способ сделать это и иметь лучшую производительность, чем наивный, - использовать конвейерную обработку.Таким образом, вы отправляете команды , не ожидая ответа , и вы фактически читаете ответы в конце, что быстрее.
Суммируя, он говорит, что используется конвейер без ожидания ответа и просто отправляется как поток.
Я взглянул на их исходный код, который подтверждает их документацию.
public Pipeline pipelined() {
pipeline = new Pipeline();
pipeline.setClient(client);
return pipeline;
}
Это возвращает ваш экземпляр Pipeline.Затем вы вызываете группу HSET
public Long hset(final byte[] key, final byte[] field, final byte[] value) {
checkIsInMultiOrPipeline();
client.hset(key, field, value);
return client.getIntegerReply();
}
, которая получает ответ righttaway .
Затем вы вызываете sync , который:
Синхронизировать конвейер, прочитав все ответы.Эта операция закрывает трубопровод.Чтобы получить возвращаемые значения из конвейерных команд, запишите разные ответыкоманд, которые вы выполняете.
Другими словами, он обрабатывает ваш экземпляр конвейера.
Подводя итог, вы не должны использовать «pipelined», если вы ожидаете от него отправки пакетатолько когда вы вызываете синхронизацию.Это не так, как это работает.