当前位置:首页 > 科技  > 软件

PHP异步非阻塞MySQL客户端连接池

来源: 责编: 时间:2024-09-10 09:50:56 184观看
导读概述AMPHP是一个事件驱动的PHP库集合,设计时考虑了纤程和并发性。amphp/mysql是一个异步MySQL客户端。该库通过在可用连接的可伸缩池中透明地分发查询来实现并发查询。客户端透明地将这些查询分布在一个可扩展的可用连

概述

AMPHP是一个事件驱动的PHP库集合,设计时考虑了纤程和并发性。amphp/mysql是一个异步MySQL客户端。该库通过在可用连接的可伸缩池中透明地分发查询来实现并发查询。客户端透明地将这些查询分布在一个可扩展的可用连接池中,并使用100%的用户态PHP,没有外部扩展依赖性(例如ext/mysqli,ext/pdo等)。Uh428资讯网——每日最新资讯28at.com

特征

  • 公开一个非阻塞API,用于并发发出多个MySQL查询
  • 透明的连接池克服了MySQL的基本同步连接协议
  • MySQL传输编码支持(gzip,TLS加密)
  • 支持参数化预处理语句
  • 带有提交和回滚事件钩子的嵌套事务
  • 无缓冲结果以减少大型结果集的内存使用
  • 完整的MySQL协议支持,包括所有可用的异步命令

安装

此包可以作为Composer依赖项安装Uh428资讯网——每日最新资讯28at.com

composer require amphp/mysql

使用

入门使用

<?php/** * @desc mysql.php * @author Tinywan(ShaoBo Wan) * @date 2024/8/16 11:19 */declare(strict_types=1);require 'vendor/autoload.php';use Amp/Mysql/MysqlConfig;use Amp/Mysql/MysqlConnectionPool;$config = MysqlConfig::fromString(    "host=127.0.0.1 user=root password=123456 db=test");$pool = new MysqlConnectionPool($config);$statement = $pool->prepare("SELECT * FROM mall_member WHERE member_time = :member_time Limit 10");$timeOne = microtime(true);$result = $statement->execute(['member_time' => 0]);foreach ($result as $key => $row) {    echo '[x] ['.$key.'] '.$row['member_name'].PHP_EOL;}$timeTwo = microtime(true);echo '[x] Run Time Result : ' . ($timeTwo - $timeOne) . PHP_EOL;

执行结果:Uh428资讯网——每日最新资讯28at.com

[x] [0] 12161435[x] [1] 开源技术小栈[x] [2] 12161435[x] [3] 12161435[x] [4] T1800082[x] [5] 12161435[x] [6] 12161435[x] [7] 12161387[x] [8] 12161235[x] [9] 12161149[x] Run Time Result : 0.045973062515259

迭代器

<?phprequire 'support/bootstrap.php';use Amp/Future;use Amp/Mysql/MysqlConfig;use Amp/Mysql/MysqlConnectionPool;use function Amp/async;$db = new MysqlConnectionPool(MysqlConfig::fromAuthority(DB_HOST, DB_USER, DB_PASS, DB_NAME));$db->query("DROP TABLE IF EXISTS tmp");/* Create table and insert a few rows *//* we need to wait until table is finished, so that we can insert. */$db->query("CREATE TABLE IF NOT EXISTS tmp (a INT(10), b INT(10))");print "Table successfully created." . PHP_EOL;$statement = $db->prepare("INSERT INTO tmp (a, b) VALUES (?, ? * 2)");$future = [];foreach (/range(1, 5) as $num) {    $future[] = async(fn () => $statement->execute([$num, $num]));}/* wait until everything is inserted */$results = Future/await($future);print "Insertion successful (if it wasn't, an exception would have been thrown by now)" . PHP_EOL;$result = $db->query("SELECT a, b FROM tmp");foreach ($result as $row) {    var_dump($row);}$db->query("DROP TABLE tmp");$db->close();

事务支持

<?phprequire 'support/bootstrap.php';require 'support/generic-table.php';use Amp/Mysql/MysqlConfig;use Amp/Mysql/MysqlConnectionPool;$db = new MysqlConnectionPool(MysqlConfig::fromAuthority(DB_HOST, DB_USER, DB_PASS, DB_NAME));/* create same table than in 3-generic-with-yield.php */createGenericTable($db);$transaction = $db->beginTransaction();$transaction->execute("INSERT INTO tmp VALUES (?, ? * 2)", [6, 6]);$result = $transaction->execute("SELECT * FROM tmp WHERE a >= ?", [5]); // Two rows should be returned.foreach ($result as $row) {    /var_dump($row);}$transaction->rollback();// Run same query again, should only return a single row since the other was rolled back.$result = $db->execute("SELECT * FROM tmp WHERE a >= ?", [5]);foreach ($result as $row) {    /var_dump($row);}$db->close();

Uh428资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112779-0.htmlPHP异步非阻塞MySQL客户端连接池

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 告别繁琐操作,实现一次登录产品互通

下一篇: 超赞!Spring Boot 3.3 自带 Controller 接口监控,大家赶紧用起来

标签:
  • 热门焦点
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之&ldquo;想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!&rdquo;曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
Top