当前位置: 首页 > news >正文

备案期间网站如何访问镇江网站托管

备案期间网站如何访问,镇江网站托管,问答系统网站模板,想要接网站业务如何做如何在 Swoole 中优雅的实现 MySQL 连接池一、为什么需要连接池 #xff1f;数据库连接池指的是程序和数据库之间保持一定数量的连接不断开#xff0c;并且各个请求的连接可以相互复用#xff0c;减少重复连接数据库带来的资源消耗#xff0c;一定程度上提高了程序的并发性…如何在 Swoole 中优雅的实现 MySQL 连接池一、为什么需要连接池 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开并且各个请求的连接可以相互复用减少重复连接数据库带来的资源消耗一定程度上提高了程序的并发性能。二、连接池实现要点协程使用 MySQL 协程客户端。使用 MySQL 协程客户端是为了能在一个 Worker 阻塞的时候让出 CPU 时间片去处理其他的请求提高整个 Worker 的并发能力。连接池存储介质使用 \swoole\coroutine\channel 通道。使用 channel 能够设置等待时间等待其他的请求释放连接。并且在等待期间同样也可以让出 CPU 时间片去处理其他的请求。假设选择 array 或 splqueue无法等待其他的请求释放连接。那么在高并发下的场景下可能会出现连接池为空的现象。如果连接池为空了那么 pop 就直接返回 null 了导致连接不可用。注因此不建议选择 array 或 splqueue。三、连接池的具体实现use Swoole\Coroutine\Channel;use Swoole\Coroutine\MySQL;class MysqlPool{private $min; // 最小连接数private $max; // 最大连接数private $count; // 当前连接数private $connections; // 连接池protected $freeTime; // 用于空闲连接回收判断public static $instance;/*** MysqlPool constructor.*/public function __construct(){$this-min 10;$this-max 100;$this-freeTime 10 * 3600;$this-connections new Channel($this-max 1);}/*** return MysqlPool*/public static function getInstance(){if (is_null(self::$instance)) {self::$instance new self();}return self::$instance;}/*** 创建连接* return MySQL*/protected function createConnection(){$conn new MySQL();$conn-connect([host mysql,port 3306,user root,password root,database fastadmin,timeout 5]);return $conn;}/*** 创建连接对象* return array|null*/protected function createConnObject(){$conn $this-createConnection();return $conn ? [last_used_time time(), conn $conn] : null;}/*** 初始化连接* return $this*/public function init(){for ($i 0; $i $this-min; $i) {$obj $this-createConnObject();$this-count;$this-connections-push($obj);}return $this;}/*** 获取连接* param int $timeout* return mixed*/public function getConn($timeout 3){if ($this-connections-isEmpty()) {if ($this-count $this-max) {$this-count;$obj $this-createConnObject();} else {$obj $this-connections-pop($timeout);}} else {$obj $this-connections-pop($timeout);}return $obj[conn]-connected ? $obj[conn] : $this-getConn();}/*** 回收连接* param $conn*/public function recycle($conn){if ($conn-connected) {$this-connections-push([last_used_time time(), conn $conn]);}}/*** 回收空闲连接*/public function recycleFreeConnection(){// 每 2 分钟检测一下空闲连接swoole_timer_tick(2 * 60 * 1000, function () {if ($this-connections-length() intval($this-max * 0.5)) {// 请求连接数还比较多暂时不回收空闲连接return;}while (true) {if ($this-connections-isEmpty()) {break;}$connObj $this-connections-pop(0.001);$nowTime time();$lastUsedTime $connObj[last_used_time];// 当前连接数大于最小的连接数并且回收掉空闲的连接if ($this-count $this-min ($nowTime - $lastUsedTime $this-freeTime)) {$connObj[conn]-close();$this-count--;} else {$this-connections-push($connObj);}}});}}$httpServer new swoole_http_server(127.0.0.1,9501);$httpServer-set([work_num 1]);$httpServer-on(WorkerStart, function ($request, $response) {MysqlPool::getInstance()-init()-recycleFreeConnection();});$httpServer-on(Request, function ($request, $response){$conn MysqlPool::getInstance()-getConn();$conn-query(SELECT * FROM fa_admin WHERE id1);MysqlPool::getInstance()-recycle($conn);});$httpServer-start();四、总结定时维护空闲连接到最小值。使用用完数据库连接之后需要手动回收连接到连接池。使用 channel 作为连接池的存储介质。
http://www.pierceye.com/news/785220/

相关文章:

  • 天津建设科技杂志的官方网站wordpress cnzz插件
  • 滨州建设网站太原网站建设优化
  • 记事本做网站怎么改字体包装设计模板设计素材
  • 下载软件的网站推荐thinkphp和wordpress
  • 青海省城乡和住房建设厅网站合肥小吃培训网页设计
  • 财经门户网站建设django校园网站开发
  • 泉州网站建设报价广东建设厅网站
  • 建设网站的源代码的所有权wordpress网站打开慢
  • 印度外贸网站有哪些家居小程序源码下载
  • 上海网站建设中心pc官方网站
  • 深圳企业网站制作公司查询西安网站设计哪家好
  • 大埔做网站手机qq邮箱发布了wordpress
  • 寻找南昌网站设计单位网站建设 中企动力医院
  • 中间商可以做网站吗平面广告设计师的工作内容
  • 网站建设用户分析做网站有什么软件
  • 洛阳网站建设启辰网络wordpress怎么破解查看
  • 长沙市网站设计公司厦门建设网站建站
  • 网站做链轮会被惩罚吗网站开发系统
  • 一般做企业网站需要什么资料WordPress情侣博客模板
  • 网站开发教程公司哪些官网用wordpress
  • redis网站开发教程创建app软件
  • 企业网站新闻wp怎么做合肥环保公司网站建设
  • 怎么仿一个复杂的网站wordpress描述怎么改
  • php 如何用op浏览器开发手机网站app开发制作哪种快
  • 网站维护主要有哪些内容和方法网页制作需要学多久
  • 机械加工网站模板做蛋糕比较火的网站
  • 网站的折线图怎么做四川省建设厅官方网站
  • 域名备案 个人 网站基本信息查询wordpress mysql缓存
  • 优秀校园网站建设汇报个人备案的网站
  • 网站信息化建设报送电商网站 设计