PHP REDIS / MYSQL, проблема с одновременными подключениями - PullRequest
0 голосов
/ 04 мая 2011

Я работал над NodeJ и Redis раньше. Поскольку NodeJs - это веб-сервер, я мог бы поддерживать единственное соединение с Redis, и все запросы http используют один и тот же клиент Redis для подключения к Redis. Но в PHP каждая страница по HTTP-запросу создает новое соединение с Redis Server, и это снижает производительность. Как они поддерживают состояние соединения в PHP? Это должно быть та же проблема с PHP-Mysql, так что я думаю, есть какие-то решения?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Способ работы php - программа, а не сервер.Каждый раз, когда вы запрашиваете страницу на своем веб-сервере, вызывается PHP для запуска программы.Как только страница будет загружена, поток будет завершен.PHP не является сервером, поэтому после завершения загрузки страницы все связанные с ним соединения прекращаются.Поэтому каждый раз, когда запрашивается страница, необходимо установить новое соединение с базой данных.Если вы заметили проблему с производительностью при подключении, попробуйте php-redis, если вы этого еще не сделали.

0 голосов
/ 07 сентября 2018

Пусть говорит, что вы используете php-fpm.php-fpm имеет главный процесс и запускает несколько рабочих процессов в соответствии с конфигурацией пула.

Каждый рабочий процесс независим (но может использовать общий ресурс, такой как кэш opcache / APUc ...), использовать процессор и память (память является наиболее важным фактором для настройки свойства max-children конфигурации пула).

Так что да, 1 HTTP-запрос = 1 рабочий php-fpm (новый или повторное использование) = 1 новое подключение к сокету (или повторное использование постоянного подключения), для масштабирования:

  • Кластер Redis
  • Прокси, такой как HAProxy между php и redis (так что вы можете ограничить maxconn)
  • Использовать локальный кеш, такой как APCu, чтобы ограничитьДоступ к Redis (сложный, но самый мощный)
  • Проверка ulimit ОС и дескрипторов открытых файлов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...