Спроси, если не понимаешь
Скоро будет Двойная Двенадцать, я хочу попросить добрых братьев,Конфигурация компьютера занимает около трех тысяч или около того, сколько денег потратить?
Хорошие братья, расскажите мне в разделе комментариев
Обзор
Хорошие братья, вы помните шаги, необходимые Redis для выполнения строки? Нет, часть перваяГрафический медленный запрос RedisЯ просто поделился, ты забыл? О, вы его еще не смотрели, так что не спешите выдумывать урок.
Хороший брат, который видел это, знает, что发送命令,命令排队,命令执行,结果响应Четыре шага. Поскольку сам Redis основан наRequest/Responseпротокола (механизм остановки и ожидания), хотя Redis уже предоставляет такие функции, какmget,msetЭто своего рода пакетная команда, но добрые братья задумайтесь, если какие-то операции вообще не поддерживаются или нет пакетной операции, надо ли выполнять команды по одной. Не будет ли это противоречить моей высокой производительности Redis (потому что каждая выполняемая команда требует времени для запроса и ответа). Добрые братья спросят, есть ли способ решить эту проблему, ответ такой:Pipeline.
PipelineБуквально это означает, что трубопровод также может быть назван конвейером.PipelineИ это не какая-то новая технология или механизм, как вJenkins,Nettyиспользуются.
Проход в RedisPipelineмеханизм может улучшить вышеуказанные проблемы,Он собирает набор команд Redis, передает их Redis один раз и возвращает результирующий набор.. Как показано ниже
как пользоваться
Он очень прост в использовании,redis-cliиз--pipeПараметр на самом деле использует механизм Pipeline. Например, следующая операцияset hello worldиincr countДве команды для сборки. Следующий код. Конечно, обычно мы работаем через клиентов Redis, таких как Jedis, о которых мы поговорим позже.
## 格式
echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\
n$7\r\ncounter\r\n' | redis-cli --pipe
принцип
необходимо реализоватьPipelineФункция, требует поддержки клиентов и серверной части.
Сервер Redis поддерживает обработку нескольких команд, отправленных клиентом по одному и тому же TCP-соединению. Можно понять, что здесь несколько команд разделены, как и обработка одной команды.После завершения обработки результаты обработки будут кэшироваться, а все команды будут упакованы и возвращены после их выполнения. Вопрос здесь в том, что еслиPipelineКогда слишком много команд одновременно, результаты ответа будут взрыватьсяSocketБуфер приема, так что добрым братьям нужно каждый раз контролировать количество команд.
клиентская сторона, какJedisРеализованная логика заключается в созданииPipelineобъект, каждый разPipelineПри добавлении команд вJedisнапишет команду (просто запись не была отправлена в Redis) наOutputstream(Jdedis оборачивает свои собственные потоки ввода/вывода). Когда будет сделан фактический вызов для получения результата, он будет вызванflush()Затем метод блокируется для получения возвращаемого результата, а затем возвращает результат вызывающему объекту.
Тестирование производительности
Под разными сетями, 10 000 записейsetСравнение времени выполнения между неконвейерным и конвейерным.
Следует отметить, что результаты тестов определенно отличаются для разных сред и сетей. Если сетевая задержка также высока, то производительность Pipeline определенно лучше.
Пакетная команда, контраст PIPELINE
- Собственные пакетные команды атомарны, конвейеры неатомарны.
- Собственная пакетная команда заключается в том, что одна команда соответствует нескольким клавишам, а Pipeline поддерживает несколько команд.
- Собственные пакетные команды поддерживаются сервером Redis, в то время как Pipeline требует совместной реализации сервера и клиента.
Применимая сцена
PelineЭто механизм повышения пропускной способности Redis, подходящий дляМногоклавишные сценарии чтения и записинапример, чтение несколькихkeyизvalueили обновить несколькоkeyизvalue, и разрешить определенный процентзапись не удалась,в реальном времениЭто тоже не так много, поэтому этот сценарий можно использовать. Например, если 10 000 сообщений поступают в redis одновременно, может не иметь значения, если 2 сообщения не пройдут. Достаточно иметь механизм компенсации на более позднем этапе. Для таких сценариев, как групповая отправка SMS, лучше всего использовать конвейер в это время. .
будь осторожен
-
PipelineЭто неатомарно.В приведенном выше анализе принципов было сказано, что Redis фактически выполняется один за другим, и команда выполнения должна быть поставлена в очередь для выполнения, поэтому будет атомарная проблема. -
PipelineНе включайте слишком много команд в . -
PipelineРаботает только на одном узле Redis за раз. -
PipelineТранзакции не поддерживаются, так как команды выполняются одна за другой.
Это конец этого вопроса.Если что-то не так, пожалуйста, оставьте сообщение в комментариях хороших братьев.Кроме тогоПросите внимания, просите лайков
Далее: Тщательное понимание транзакций Redis
Предыдущая: Графический медленный запрос Redis