2018年swoole实战5-异步mysql模拟数据异步mysql连接时长

继上篇 2018年swoole实战4-异步io读写

本篇演示 swoole的异步mysql

模拟数据

在本地test数据库中新建book表,写入模拟数据

CREATE TABLE `book` 
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` text,(
  `titlle` varchar(255) NOT NULL COMMENT '标题',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into book value (1, '科幻小说', '三体');

异步mysql

<?php
class AsyMysql {
    public $db;
    public $config = [];
    public function __construct()
    {
        $this->db = new swoole_mysql();
        $this->config = [
            'host' => '127.0.0.1',
            'port' => '3306',
            'user' => 'root',
            'password' => '',
            'database' => 'test',
            'charset' => 'utf8',
        ];
    }

    public function execute($id, $content) {
        try {
            $this->db->connect($this->config, function ($db, $result) use ($id, $content) {
                if ($result === false) {
                    // 连接失败
                    var_dump($db->connect_error);
                }
                $sql = "update book set `content` = '{$content}' where id = {$id}";
                $db->query($sql, function ($db, $result) {
                    if ($result === false) {
                        var_dump($db->error);
                    } else if ($result === true) {
                        var_dump($db->affected_rows);
                    } else {
                        var_dump($result);
                    }
                });
                echo '执行成功' . PHP_EOL;
                $db->close();
            });
        } catch (\Swoole\Mysql\Exception $e) {
            echo $e->getMessage();
        }

        return true;
    }
}

$obj = new AsyMysql();
$flag = $obj->execute(1,'大刘写的科幻小说');
echo "开始执行" . PHP_EOL;

执行结果

☁  async  php mysql.php
开始执行
执行成功
[2018-07-27 15:24:27 @65638.0]  TRACE   [THREAD #0]EP=3|FD=4

连接时长

默认情况下,mysql的等待连接时长为1秒,超时会报错,如在代码最后加上

$obj = new AsyMysql();
$flag = $obj->execute(1,'大刘写的科幻小说');
echo "开始执行" . PHP_EOL;
sleep(3); // 暂停3秒

连接超时

通过设置超时时间可解决该问题:

$this->config = [
    'host' => '127.0.0.1',
    'port' => '3306',
    'user' => 'root',
    'password' => '',
    'database' => 'test',
    'charset' => 'utf8',
    'timeout' => 5, // 设置超时时间
];
 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码神联盟

珍藏 | Java 岗位 【数据库】 面试题及答案详解

29620
来自专栏逸鹏说道

程序猿是如何解决SQLServer占CPU100%的

文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 有哪些SQL语句...

38580
来自专栏社区的朋友们

MySQL 入门常用命令大全(上)

作为一个 MySQL 的初学者,在短短的几个月中接触了一下,记录了一下工作中用到的 SQL 语句以及未来可能会用到的 MySQL 知识点,作为日后的参考手册。因...

1K10
来自专栏芋道源码1024

数据库中间件 MyCAT源码分析:【单库单表】插入

本文主要基于 MyCAT 1.6.5 正式版 1. 概述 2. 接收请求,解析 SQL 3. 获得路由结果 4. 获得 MySQL 连接,执行 SQL 5. 响...

530120
来自专栏chenssy

在一个千万级的数据库查寻中,如何提高查询效率?

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orderby 涉及的列上建立索引;

15220
来自专栏跟着阿笨一起玩NET

Server 2005中的分区表(一)

本文转载:http://blog.csdn.net/smallfools/article/details/4930810

8020
来自专栏数据和云

从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异

编辑手记 MySQL是目前最流行的开源数据库,由于其部署方便,运维简单,被广泛用于互联网的各个领域。随着整体IT架构的变更,传统的金融,电信业务,也逐渐走上从商...

67470
来自专栏数据存储

十分钟包会MySQL插件开发

请看下面的MySQL UDF插件模版,通过C执行shell语句。所以只要替换shell语句的位置,保存并编译。duang的一下,你的MySQL插件就成功出炉。

46580
来自专栏沃趣科技

MVCC原理探究及MySQL源码实现分析

目录预览 数据库多版本读场景 MVCC实现原理 1、通过DB_ROLL_PT 回溯查找数据历史版本 2、通过read view判断行...

63680
来自专栏杨建荣的学习笔记

关于date格式的两个案例(r4笔记第96天)

在工作中总是会碰到各种和date相关的问题,一般这种问题都是让人很纠结的。 比如前几天一个朋友和我分享了他关于时间问题的两个案例。 第一个是他在做impdp导入...

32340

扫码关注云+社区

领取腾讯云代金券