PHP REDIS / MYSQL,并发连接问题

时间:2011-05-04 17:56:39

标签: php mysql redis

之前我曾在NodeJs和Redis上工作过。由于NodeJ是一个Web服务器,我可以保持与Redis的单一连接,并且所有http请求都使用相同的Redis客户端连接到Redis。          但是在PHP中,每个HTTP请求页面都会创建一个与Redis Server的新连接,这会降低性能。他们如何在PHP中维护连接状态?它也必须与PHP-Mysql相同,所以我猜有解决方案吗?

2 个答案:

答案 0 :(得分:2)

php的工作方式,它是一个程序,而不是一个服务器。每次在Web服务器上请求页面时,都会调用PHP来运行该程序。页面加载完成后,线程结束。 PHP不是服务器,因此一旦页面加载完成,与其关联的所有连接都将终止。因此,每次请求页面时,都必须建立与数据库的新连接。如果您在连接时注意到性能问题,那么如果您还没有这样做,则应该尝试使用php-redis。

答案 1 :(得分:0)

让我们说您正在使用php-fpm。 php-fpm具有一个主进程,并根据池配置运行多个工作进程。

每个工作进程都是独立的(但可以使用共享资源,例如opcache / APUc缓存...),消耗CPU和内存(内存是调整池配置max-children属性的最重要因素)。

是的,有1个HTTP查询= 1个php-fpm工作程序(新鲜或重用)= 1个新的套接字连接(或重用持久连接),以进行扩展:

  • Redis群集
  • php和redis之间的代理,例如HAProxy(因此可以限制maxconn)
  • 使用诸如APCu之类的本地缓存来限制Redis访问(复杂但功能最强大)
  • 检查操作系统ulimit和打开的文件描述符