PHP REDIS/MYSQL,并发连接问题
Posted
技术标签:
【中文标题】PHP REDIS/MYSQL,并发连接问题【英文标题】:PHP REDIS/MYSQL, issue with concurrent connections 【发布时间】:2011-05-04 17:56:38 【问题描述】:我之前在 NodeJs 和 Redis 上工作过。由于 NodeJs 是一个 Web 服务器,我可以维护与 Redis 的单个连接,并且所有 http 请求都使用相同的 Redis 客户端连接到 Redis。 但是在 php 中,HTTP 请求的每个页面都会创建一个到 Redis 服务器的新连接,这会降低性能。他们如何维护 PHP 中的连接状态? PHP-mysql也一定是同样的问题,所以我想有解决方案吗?
【问题讨论】:
【参考方案1】:php 的工作方式,它是一个程序,而不是一个服务器。每次您在 Web 服务器上请求页面时,都会调用 PHP 来运行该程序。页面加载完成后,线程就结束了。 PHP 不是服务器,因此一旦页面加载完成,与之关联的所有连接都会终止。因此,每次请求页面时,都必须建立与数据库的新连接。如果您在连接时注意到性能问题,如果您还没有这样做,您应该尝试 php-redis。
【讨论】:
PHP-Redis 似乎已经过时了。但我会尝试的。谢谢。 嗨,科伦。如何在 Windows 上安装 PHP Redis?有链接吗? github.com/downloads/char101/phpredis/… 下载它并将其添加到您的 php.ini 文件中,这样就可以了【参考方案2】:假设您正在使用 php-fpm。 php-fpm有一个master进程,根据pool配置运行多个worker进程。
每个工作进程都是独立的(但可以使用共享资源,例如 opcache/APUc 缓存 ...),消耗 CPU 和内存(内存是调整池配置 max-children 属性的最重要因素)。
所以是的,1 个 HTTP 查询 = 1 个 php-fpm 工作器(新的或重用)= 1 个新的套接字连接(或重用持久连接),以进行扩展:
Redis 集群 php和redis之间的代理如HAProxy(这样可以限制maxconn) 使用 APCu 等本地缓存来限制 Redis 访问(复杂但最强大) 检查操作系统 ulimit 和打开的文件描述符【讨论】:
以上是关于PHP REDIS/MYSQL,并发连接问题的主要内容,如果未能解决你的问题,请参考以下文章
openshift 的最大并发 websocket 连接数是多少?