easyswoole - 基于swoole扩展实现的一款高性能php框架

FastDb 類使用

調用方法說明

addDb

用于注冊連接池。

<?php
$config = new \EasySwoole\FastDb\Config([
    'name'              => 'default',    // 設置 連接池名稱,默認為 default
    'host'              => '127.0.0.1',  // 設置 數據庫 host
    'user'              => 'easyswoole', // 設置 數據庫 用戶名
    'password'          => 'easyswoole', // 設置 數據庫 用戶密碼
    'database'          => 'easyswoole', // 設置 數據庫庫名
    'port'              => 3306,         // 設置 數據庫 端口
    'timeout'           => 5,            // 設置 數據庫連接超時時間
    'charset'           => 'utf8',       // 設置 數據庫字符編碼,默認為 utf8
    'autoPing'          => 5,            // 設置 自動 ping 客戶端鏈接的間隔
    'useMysqli'         => false,        // 設置 不使用 php mysqli 擴展連接數據庫
    // 配置 數據庫 連接池配置,配置詳細說明請看連接池組件 http://www.zbjtqy.com/Components/Pool/introduction.html
    // 下面的參數可使用組件提供的默認值
    'intervalCheckTime' => 15 * 1000,    // 設置 連接池定時器執行頻率
    'maxIdleTime'       => 10,           // 設置 連接池對象最大閑置時間 (秒)
    'maxObjectNum'      => 20,           // 設置 連接池最大數量
    'minObjectNum'      => 5,            // 設置 連接池最小數量
    'getObjectTimeout'  => 3.0,          // 設置 獲取連接池的超時時間
    'loadAverageTime'   => 0.001,        // 設置 負載閾值
]);
// 或使用對象設置屬性方式進行配置
// $config->setName('default');
// $config->setHost('127.0.0.1');
FastDb::getInstance()->addDb($config);

testDb

用于測試連接池的數據庫配置是否可用。

FastDb::getInstance()->testDb();
FastDb::getInstance()->testDb('read');
FastDb::getInstance()->testDb('write');

setOnQuery

設置連接池連接執行 SQL 查詢時的回調,可用于監聽 SQL,可查看監聽 SQL 章節。

<?php
FastDb::getInstance()->setOnQuery(function (\asySwoole\FastDb\Mysql\QueryResult $queryResult) {
    // 打印 sql
    if ($queryResult->getQueryBuilder()) {
        echo $queryResult->getQueryBuilder()->getLastQuery() . "\n";
    } else {
        echo $queryResult->getRawSql() . "\n";
    }
});

invoke

可用于執行數據庫操作。

在高并發情況下,資源浪費的占用時間越短越好,可以提高程序的服務效率。

ORM 默認情況下都是使用 defer 方法獲取 pool 內的連接資源,并在協程退出時自動歸還,在此情況下,在帶來便利的同時,會造成不必要資源的浪費。

我們可以使用 invoke 方式,讓 ORM 查詢結束后馬上歸還資源,可以提高資源的利用率。

<?php
$builder = new \EasySwoole\Mysqli\QueryBuilder();
$builder->raw('select * from user');
$result = FastDb::getInstance()->invoke(function (\EasySwoole\FastDb\Mysql\Connection $connection) use ($builder) {
    $connection->query($builder);
    return $connection->rawQuery("select * from user");
});

begin

啟動事務。

FastDb::getInstance()->begin();

commit

提交事務。

FastDb::getInstance()->commit();

rollback

回滾事務。

FastDb::getInstance()->rollback();

query

自定義 SQL 執行。

$builder = new \EasySwoole\Mysqli\QueryBuilder();
$builder->raw("select * from user where id = ?", [1]);
FastDb::getInstance()->query($builder);

原生 SQL 表達式將會被當做字符串注入到查詢中,因此你應該小心使用,避免創建 SQL 注入的漏洞。

rawQuery

自定義 SQL 執行。

FastDb::getInstance()->rawQuery('select * from user where id = 1');

原生 SQL 表達式將會被當做字符串注入到查詢中,因此你應該小心使用,避免創建 SQL 注入的漏洞。

currentConnection

獲取當前所用的連接。

FastDb::getInstance()->currentConnection();

reset

銷毀所有連接池。

FastDb::getInstance()->reset();

preConnect

用于預熱連接池。

為了避免連接空檔期突如其來的高并發,我們可以對數據庫連接預熱,也就是 Worker 進程啟動的時候,提前準備好數據庫連接。

對連接進行預熱使用示例如下所示:

<?php

namespace EasySwoole\EasySwoole;

use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\FastDb\FastDb;

class EasySwooleEvent implements Event
{
    public static function initialize()
    {
        date_default_timezone_set('Asia/Shanghai');

        $mysqlArrayConfig = Config::getInstance()->getConf('MYSQL');
        $config = new \EasySwoole\FastDb\Config($mysqlArrayConfig);
        FastDb::getInstance()->addDb($config);
    }

    public static function mainServerCreate(EventRegister $register)
    {
        $register->add($register::onWorkerStart, function () {
            // 連接預熱
            FastDb::getInstance()->preConnect();
        });
    }
}

isInTransaction

當前連接是否處于事務中。

FastDb::getInstance()->isInTransaction();

getConfig

根據連接池名稱獲取當前連接池配置。

FastDb::getInstance()->getConfig();
FastDb::getInstance()->getConfig('read');
主站蜘蛛池模板: 饲料设备_饲料加工设备_饲料成套加工设备专业提供商-河南杰昌机械设备有限公司 | 锌钢护栏,铁艺护栏,围墙护栏,锌钢围墙护栏,铁艺围墙护栏-互润金属丝网厂 | 无土栽培|无土栽培技术|水肥一体化|无土栽培蔬菜 | 鸿茗商务-杭州鸿茗商务咨询有限公司| 双效-多效-三效-废水-污水蒸发器_离心喷雾-污泥干燥机_蒸发浓缩器【天辰环保 】 | 郑州建网站,郑州做网站,郑州网站建设,郑州网站制作,郑州高端定制网站,郑州APP开发 | 首页-南德电气集团-电能质量产品解决方案|能源数字化系统解决方案|新能源检测评估服务|电力/光伏/储能EPC工程总承包 | 永磁变频空压机_青岛空压机_螺杆空压机_口罩专用空压机-青岛凯瑞特机电设备有限公司 | 上海恩计仪器首页-微生物限度检测仪-微生物限度仪厂家 | 上海便携式液体_日本理音液体_HACH液体颗粒计数器,metone尘埃粒子计数器-上海翰森科学仪器有限公司 | 河南豫冀锅炉容器制造有限公司 | 山东国新起重机械有限公司,国新起重,起重设备,起重机械,山东起重机厂家,行车,龙门吊 | 文件管理系统-文件管理软件-文档管理系统-文档管理软件-档案管理系统-档案管理软件 - 致得软件 | 矿用三环链|锻打/焊接三环链|矿车万能环|三环链销子-济宁卓力工矿设备有限公司 | 汽油发电机,柴油发电机,小型汽油发电机,小型柴油发电机,家用发电机生产厂家——上海东明动力设备有限公司 | 金属雕花板厂家_外墙保温板_专业生产批发_山东百菲特 | 全自动热敷贴(袋)温度特性检测仪-武汉伊特仪器有限公司 | 呕吐毒素快速检测仪-黄曲霉毒素测定仪-玉米赤霉烯酮快速检测卡-南京微测生物科技有限公司 | 胶球清洗-射水抽气器-磷酸盐加药装置-连云港振辉机械设备有限公司 | 石家庄华龙鼎电动门,石家庄电动门电话,石家庄电动门配件,石家庄电动门维修电话,石家庄电动门安装电话,石家庄华龙电动门 | 同步分流马达_液压泵维修_派克多路阀-济南富诚液压设备有限公司 通用变频器|国产变频器|深圳变频器厂家-深圳市英捷思技术有限公司 | 化工网-化工新闻资讯平台-中华化工行业门户网站 | 郑州课桌椅|学生课桌椅|升降课桌椅批发|厂家|价格-新科教育用品 郑州井盖雨水篦子厂家-建联建材 | 深圳汽车贴膜_深圳全车车身改色贴膜|UPPF隐形车衣官网 | 上海vi设计公司_logo设计_包装设计_品牌定位策划公司-焕识品牌设计 - | 水热反应釜厂家_水热反应釜价格_水热合成反应釜批发-仪贝尔仪器 - 水热釜,水热反应釜,水热反应釜厂家,水热反应釜价格,水热反应釜型号,水热反应釜内衬,水热反应釜25ml,水热反应釜50ml,水热反应釜100ml,水热合成反应釜 | 现代卓越官网-专注于pmp培训证书-pmp考试报名时间-pmp认证-项目管理pmp-ACP敏捷管理-NPDP认证 | 泡沫混凝土垫层填充厂家,发泡混凝土垫层填充,轻质混凝土垫层填充厂家,深圳市鸿奥建材发展有限公司 | 实木中药柜,实木中药斗,木制中药柜,木制中药柜的价格,实木中草药柜,安国美佳中药柜厂家 | 仪器仪表维修_示波器维修_进口分析仪维修_热像仪维修_上海仰光电子仪器仪表维修部 | 江苏省阀门工业协会,江苏阀协 | 商城网站建设_商城系统_响应式商城_小程序商城_FwShop | 模温机_厂家_现货供应-卡塞尔机械(浙江)有限公司 | 激光清洗机_激光除锈机_激光焊接机 - 上海锡昊激光科技有限公司 激光切管机_等离子切管机_相贯线切管机厂家|服务为先-山东美峰智能设备有限公司 | 曙海培训-ZEMAX培训射频培训无线电培训GMS培训EMC培训电磁兼容性培训Maxwell培训欧姆龙培训procast培训可靠性培训光学培训工业机器人培训NI培训Linux培训5G培训Hadoop培训CFD培训 | 聊城钢管厂,无缝钢管厂家-山东旺耀金属制品有限公司 | 皮革耐折试验机-消字率测试仪-面具全视野测试仪-东莞市誉扬检测仪器有限公司 | 山东货架,山东仓库货架,临沂仓库货架,临沂仓储货架-山东兴博物流设备有限公司 | 宁波雷豹机电科技有限公司|雷豹冷风机|雷豹工业大风扇|MFC18000|MFC16000|MFC6000|EF3622|EF4222|EF4822|移动工业蒸发式冷风机空气冷却器|大型工业空调扇|雷豹移动式工业大风扇|雷豹大风扇|生产厂家|公司官网 | 网上配音_免费配音_广告专题配音_网络录音网站【海豚配音】 | 上海希喆机械有限公司-Schunk雄克,雄克卡盘, 雄克机械手, B+R贝加莱, ELCIS编码器,艾西斯编码器, TWK编码器,Nexen,Joyce dayton升降机,Thomson汤姆森,TPG减速机,INA导轨。 |