2017-01-27 3 views
0

Это может быть основной вопрос, но google не вернул удовлетворительный результат.Запросить объединение в Redis

Если я использую Redis в качестве кеша и отправляю тонны одинаковых запросов Redis, будет ли он объединять его в один запрос и перенаправлять только один запрос на сервер в случае промаха в кеше?

ответ

0

Redis - это просто магазин: вы добавляете к нему вещи и возвращаете их обратно. Он не осведомлен о том, что вы используете для кэширования, или о том, как пересылать пропуски на какой-либо другой сервер, который будет зависеть от приложения, обрабатывающего запрос, и использования Redis для кеширования.

+0

спасибо. Я не уверен, буду ли я просто называть это магазином, потому что он делает намного больше. Но из вашего ответа кажется, что эта функция недоступна. Вероятно, стоит добавить его ИМО. – animageofmine

+0

Это будет похоже на добавление веб-сервера в MySQL. Различные программы делают разные вещи и делают redis делать что-то, что можно добавить программно к слою над ним, просто добавив раздувание. –

0

Нет, recuasse для этого потребует значительного кода для поддержки на обоих концах, и ни один сервер, HTTP или Redis не построил это. Каждый запрос от HTTP-сервера будет его собственным подключением, и его необходимо будет ответить индивидуально. В текущей архитектуре серверов HTTP или Redis нет возможности получать несколько запросов на одно соединение и отвечать на другой, одновременно устраняя другие пути запроса.

Кроме того, учитывая скорость работы Redis, было бы весьма вероятно, что накладные расходы при определении того, какие запросы были идентичны как по запросу, так и по содержанию, полностью отрицали бы любую возможную выгоду от такой схемы и, вероятно, увеличивали бы время отклика далеко более простой ответ на каждый из них будет принимать в совокупности. Redis не мог бы знать, что запрос клиента A для ключевого foo может быть проигнорирован для клиента B для foo. Что делать, если один запрос блокируется, а другой нет? Что делать, если оба клиента находятся на одном IP-адресе, но совершенно разные процессы? Опять же, Редис не знал бы.

В вашем примере промаха в кеше, Redis должен был как-то отреагировать на клиента и сказать: «У меня нет ничего для вас» - это именно тот маршрут, который нужно пройти. Принимая во внимание, что большая часть накладных расходов при разговоре с сервером Redis является TCP-соединением, должно быть совершенно очевидно, что, поскольку вы хотите, чтобы соединение было открыто для амортизации по нескольким запросам, вам все равно придется отвечать на соединение сделанный в запросе, и, кроме того, нет способа узнать, что запрос A на соединение B можно обрабатывать так же, как запрос Z при подключении D.

Вот почему потребуется существенная переработка основного протокола связи и архитектура на оба концы труб. Это также очень похоже на довольно преждевременную оптимизацию без данных, чтобы поддержать аргументы позади этого. Redis способен обрабатывать более миллиона запросов в секунду, в лучшем случае сомнительно, что вся дополнительная сложность и вычисления с обеих сторон для предоставления вашего примера улучшат это.