workerman写mysql连接池的方法与作用

workerman写mysql连接池的方法与作用

首先要了解为什么用连接池,连接池能为你解决什么问题

连接池主要的作用:

1、减少与数据服务器建立TCP连接三次握手及连接关闭四次挥手的开销,从而降低客户端和mysql服务端的负载,缩短请求响应时间

2、减少数据库的并发连接数,即解决应用服务器过多导致的数据库 too many connections 问题

如果是为了解决问题1

则在workerman中数据库连接池不是最高效的方法,反而是自找麻烦的做法。由于PHP是单进程单线程的,使用PHP实现数据库连接池,肯定需要用单独的进程去做,那么就会涉及到进程间的通讯,使得原本和mysql直接通讯的过程变成 与连接池再到mysql的通讯,增加了应用端的负载。

解决问题1最高效的方法是为每个业务进程建立一个数据库单例(例如workerman提供的DB类),实现数据库长连接,这样每个进程的所有请求都使用自己的这一个数据库长连接,整个进程的生命周期只有一次TCP握手和断开连接挥手的开销,并且应用与mysql直接通讯,没有连接池那样中间一层进程间IPC通讯,性能是最高的,没有之一。

如果是为了问题2

首先看下自己到底有多少台应用服务器,每台服务器与mysql有多收并发连接。假如你只有10台应用服务器,每个服务器50个进程,每个进程1个数据库连接,那么到mysql服务端总共只有10*50=500个并发连接(并非活跃连接),500个并发连接对于mysql来说就是小菜一碟,为了解决问题2完全没有使用连接池的必要。

法语写作助手 法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手 31 查看详情 法语写作助手

假如你有1000台应用服务器,那么连接池是有必要的,但是这个连接池不能是运行在本地应用服务器上的连接池,因为1000台应用服务器就有1000个连接池,即使每个连接池只开10个连接,那么数据库的连接数也会轻松打满。所以不要指望在当前服务器上开几个task进程实现的连接池就能解决这个问题。

1000台应用服务器的集群,每台服务器上搞几个进程实现连接池同样是不靠谱的方法。真正能够解决问题2的方法是建立一个独立的数据库连接池服务器或者说集群,全局管理所有的数据库链接。

综上所述,

如果单独是为了问题1实现php的mysql连接池,那么数据库单例是比所谓的连接池更简单更高效的做法。

如果是为了实现问题2,那么想必业务也有一定的规模了,如果真心是想用workerman做个单独的连接池集群,下面是大概简单的做法,建立一些task进程,每个进程创建一个数据库连接,task进程收到sql请求后发送给mysql服务器,mysql服务器返回后task进程再把结果发给sql发起者。

连接池代码类似如下 如果是多台服务器组成的连接池集群,前面最好加一个lvs:

// task worker,使用Text协议$task_worker = new Worker('Text://0.0.0.0:1234');$task_worker->count = 64;$task_worker->name = 'MysqlTask';$task_worker->onMessage = function($connection, $sql){     // 执行sql.... 得到结果,这里省略....     $sql_result = your_mysql_query($sql);     // 发送结果     $connection->send(json_encode($sql_result));};

在workerman中调用:

use WorkermanConnectionAsyncTcpConnection;// 与远程连接池服务建立异步链接,ip为远程连接池服务的ip,如果是集群就是lvs的ip$sql_connection = new AsyncTcpConnection('Text://ip:1234');// 发送sql$sql_connection->send("SELECT ... FROM .....");// 异步获得sql结果$sql_connection->onMessage = function($sql_connection, $sql_result){     // 这里只是打印结果     var_dump(json_decode($task_result));};// 执行异步链接$sql_connection->connect();

更多workerman知识请关注PHP中文网workerman教程栏目。

以上就是workerman写mysql连接池的方法与作用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/360999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
mysql设置编码的命令是什么
上一篇 2025年11月6日 02:52:53
如何查看性能计数器DLL主机
下一篇 2025年11月6日 02:52:55

相关推荐

  • MySQL Scheduler Events带来的风险

    MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险

    定时任务是开发和运维人员常用的工具,例如cron、job、schedule、events scheduler等,这些工具旨在自动化重复执行某些任务。在这里,我们将探讨mysql数据库内置的定时任务——events scheduler带来的风险案例。 一、现象描述 从库出现了数据不同步现象,具体错误如…

    2026年9月4日 用户投稿
    1000
  • 一文搞懂MySQL索引所有知识点(建议收藏)

    一文搞懂MySQL索引所有知识点(建议收藏)一文搞懂MySQL索引所有知识点(建议收藏)一文搞懂MySQL索引所有知识点(建议收藏)一文搞懂MySQL索引所有知识点(建议收藏)

    本篇文章给大家带来了mysql数据库中索引的相关知识,其中几乎包含了索引的全部知识点,希望对大家有帮助。 Mysql索引 索引介绍 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 一般来说索引本身也很大,不可能全…

    2026年9月4日 用户投稿
    100
  • 怎样使MySQL的索引更高效?

    怎样使MySQL的索引更高效?怎样使MySQL的索引更高效?怎样使MySQL的索引更高效?怎样使MySQL的索引更高效?

    本篇文章给大家带来了mysql如何设计索引更高效的相关知识,那接下来我们就来看一下如何设计索引,使用索引才能提降低接口的rt,提高用户体检,希望对大家有帮助。 我们知道,索引是一个基于链表实现的树状Tree结构,能够快速的检索数据,目前几乎所RDBMS数据库都实现了索引特性,比如MySQL的B+Tr…

    2026年9月4日 用户投稿
    100
  • 总结分享MySQL中常用的15个查询子句(快来收藏)

    总结分享MySQL中常用的15个查询子句(快来收藏)总结分享MySQL中常用的15个查询子句(快来收藏)总结分享MySQL中常用的15个查询子句(快来收藏)总结分享MySQL中常用的15个查询子句(快来收藏)

    mysql中如何进行查询?下面本篇文章给大家总结分享15个mysql中常用的查询子句,值得收藏,希望对大家有所帮助! 对于数据分析,MySQL多采用查询,如数据的排序、分组、去重、汇总、字符串匹配等。如果查询的数据涉及多个表,则需要连接这些表。本文将谈谈MySQL中常用的查询子句,共15个。【相关推…

    2026年9月3日 用户投稿
    200
  • 分析一下MySQL中的 count(*) 真的要比 count(1) 快吗?

    分析一下MySQL中的 count(*) 真的要比 count(1) 快吗?分析一下MySQL中的 count(*) 真的要比 count(1) 快吗?分析一下MySQL中的 count(*) 真的要比 count(1) 快吗?分析一下MySQL中的 count(*) 真的要比 count(1) 快吗?

    mysql中的 count(*) 真的要比 count(1) 快吗?下面本篇文章给大家比较一下mysql中的 count(*) 和 count(1),看看它们的性能差距,希望对大家有所帮助! 今天有人跟我讲 MySQL 中 count(1) 比 count(*) 快,这能忍?必须得和他掰扯掰扯。 声…

    2026年9月3日 用户投稿
    100
  • mysql重新安装的所有疑问都在这里

    mysql重新安装的所有疑问都在这里mysql重新安装的所有疑问都在这里mysql重新安装的所有疑问都在这里mysql重新安装的所有疑问都在这里

    本篇文章给大家带来mysql重新安装的相关知识,相信有不少人遇到过需要重新安装mysql的经历,忘记root密码怎么办?不同的系统又应该怎样操作,下面我们就来看一下重新安装mysql会遇到的问题,应该怎么解决,希望对大家有帮助。 近日遇到一个问题 重新安装了一下系统,但庆幸的是mysql的安装目录 …

    2026年9月3日 用户投稿
    100
  • 如何解决mysql 错误1053问题

    如何解决mysql 错误1053问题如何解决mysql 错误1053问题如何解决mysql 错误1053问题如何解决mysql 错误1053问题

    mysql错误1053的解决办法:1、打开cmd控制台,执行命令“mysqld-nt remove mysqlservice”;2、输入命令“mysqld-nt install mysqlservice”;3、重新注册服务并重启mysql。 本文操作环境:Windows7系统、Mysql5.7版、D…

    2026年9月3日 用户投稿
    100
  • MySQL日志设置及查看方法详解

    我们都很熟悉mysql日志,本文主要介绍了mysql日志设置及查看方法,需要的朋友可以参考下,希望能帮助到大家。 MySQL有以下几种日志:错误日志: -log-err查询日志: -log慢查询日志: -log-slow-queries更新日志: -log-update二进制日志: -log-bin…

    用户投稿 2026年9月3日
    100
  • 如何解决mysql jdbc中文乱码问题

    mysql jdbc中文乱码的解决办法就是在jdbc url中明确设置characterEncoding属性为utf8,代码如“jdbc:mysql://host:port/dbname?characterEncoding=utf8”。 本文操作环境:Windows7系统、Mysql5.7版、Del…

    2026年9月3日
    100
  • linux服务器下查看mysql的安装信息实例分享

    linux服务器下查看mysql的安装信息实例分享linux服务器下查看mysql的安装信息实例分享linux服务器下查看mysql的安装信息实例分享linux服务器下查看mysql的安装信息实例分享

    本文主要介绍了linux服务器下查看mysql的安装信息,需要的朋友可以参考下,希望能帮助到大家。 查看mysql的安装信息: #ps -ef | grep mysql usr/bin/mysql 是指:mysql的运行路径 var/lib/mysql 是指:mysql数据库文件的存放路径 usr/…

    2026年9月3日 用户投稿
    200
  • 怎么解决mysql 1146错误问题

    mysql 1146错误的解决办法:1、拷贝原来mysql安装目录data里的ibdata1;2、检查ibdata文件所属的用户和用户组是否正确;3、使用“repair table tablename”修复表即可。 本文操作环境:Windows7系统、Mysql5.7版、Dell G3电脑。 怎么解…

    2026年9月3日
    100
  • 必须了解SQL优化最干货的总结

    本篇文章给大家带来了关于mysql数据库优化的相关知识,希望对大家有帮助。 mysql数据库优化 减少数据访问: 设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO返回更少的数据: 只返回需要的字段和数据分页处理 减少磁盘io及网络io减少交互次数: 批量DML操作,函数存储等减少数据连接次数…

    2026年9月3日
    100
  • 最全解析:MySQL字段类型

    最全解析:MySQL字段类型最全解析:MySQL字段类型最全解析:MySQL字段类型最全解析:MySQL字段类型

    本篇文章给大家带来了关于mysql字段类型的相关知识,做了个总结,希望对大家有帮助。 前言: 要了解一个数据库,我们必须了解其支持的数据类型。MySQL 支持大量的字段类型,其中常用的也有很多。前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇文章我们将把字…

    2026年9月3日 用户投稿
    100
  • mysql中if的用法是什么

    在mysql中,if()函数用于判断条件,在条件为true时返回一个值,在条件为false则返回另一个值,语法为“IF(条件, 条件为真时的返回值, 条件为假时的返回值)”。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑 mysql中if的用法是什么 IF(…

    2026年9月3日
    000
  • mysql中not的用法是什么

    在mysql中,not用于判断表达式的真假,是mysql中的一个逻辑运算符,语法为“select not 表达式”,如果表达式是真,结果返回 1,如果表达式是假,结果返回 0。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysql中not的用法是什么 …

    2026年9月3日
    100
  • PHP中利用file_get_contents高效处理动态多URL请求的教程

    本文详细阐述了在PHP中如何正确且高效地使用file_get_contents函数,结合数据库查询结果,循环访问并处理多个动态生成的URL。文章分析了常见的循环嵌套错误,并提供了优化的代码示例,旨在帮助开发者避免逻辑陷阱,确保每个URL都能被准确无误地请求,从而实现数据抓取或外部服务调用的预期效果。…

    2026年9月3日
    200
  • mysql怎样修改列属性

    mysql怎样修改列属性mysql怎样修改列属性mysql怎样修改列属性mysql怎样修改列属性

    在mysql中,可以利用“ALTER TABLE 表名字 MODIFY COLUMN 列名字 更改后的列属性”语句来修改列属性,其中ALTER命令用于修改数据表名或者修改数据表字段,当参数设置为属性值时,就会修改指定列的数据属性。 本教程操作环境:windows10系统、mysql8.0.22版本、…

    2026年9月3日 用户投稿
    100
  • mysql中主键是索引吗

    mysql中主键不是索引。主键全称“主键约束”,是对表中数据的一种约束,它是表的一个特殊字段,该字段能唯一标识该表中的每条信息;而索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。 本教程操作环境:windows7系统、mysql8版本、Dell…

    2026年9月3日
    100
  • Workerman网络编程进阶:实现高效的游戏服务器

    Workerman网络编程进阶:实现高效的游戏服务器 随着游戏行业的不断发展,越来越多的游戏开发者开始关注游戏服务器的性能和效率。高效的游戏服务器能够提供更好的游戏体验,吸引更多的玩家。而Workerman作为一个高性能的PHP网络编程框架,正逐渐成为游戏开发者的首选。 本文将介绍如何使用Worke…

    2026年9月3日
    000
  • Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)

    Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)

    首先要明确的是,celery 4.1+版本的官方文档已经详细说明了,在该版本之后,无需再引入依赖于django-celery库,直接使用celery本身即可。在去年年初的一篇文章中提到的python 3.7.2和django 2.0.4使用django-celery时遇到的一些问题,现今已不存在。技…

    2026年9月3日 用户投稿
    100

发表回复

登录后才能评论
关注微信