swoole mysql 协程_swoole-orm: 基于swoole的mysql协程连接池,简单封装。实现多个协程间共用同一个协程客户端。参考thinkphp-orm...
swoole-orm
基于swoole的mysql协程连接池,简单封装。
实现多个协程间共用同一个协程客户端
感谢完善
[1]:nowbe -> 新增数据返回insert_id
版本
v0.0.1
1、初完成
v0.0.2
1、修复find()查询bug
v0.0.3
1、将splqueque修改为channel
2、添加lock()
3、添加日志
4、表前缀
v0.0.4
1、添加setDefer -> 设置是否返回结果(默认为true。部分操作,例如insert,update等,如果不需要返回返回结果,则可以设置为false)
2、使用go处理协程
3、完善日志功能
v0.0.5
1、去掉日志功能,修改为在log文件打印错误信息和抛出异常
2、添加断线重连功能
3、添加instance()函数,如果有特殊需求扩展无法实现,又想共用连接池时,譬如事务处理,此时可以通过instance获取一个连接
4、添加put()函数,配合instance使用,使用完连接后,将连接put回连接池里
5、find()函数bug修复,返回一维数组
v0.0.6
1、修复返回类型报警提示
2、修复where bug
v0.0.7
1、where的or修复
引入
>composer require sethink/swoole-orm
入门例子
namespace Demo;
include_once "./vendor/autoload.php";
use sethink\swooleOrm\Db;
use sethink\swooleOrm\MysqlPool;
use swoole;
class Demo
{
protected $server;
protected $MysqlPool;
public function __construct()
{
$this->server = new Swoole\Http\Server("0.0.0.0", 9501);
$this->server->set(array(
'worker_num' => 4,
'max_request' => 50000,
'reload_async' => true,
'max_wait_time' => 30,
));
$this->server->on('Start', function ($server) {});
$this->server->on('ManagerStart', function ($server) {});
$this->server->on('WorkerStart', array($this, 'onWorkerStart'));
$this->server->on('WorkerStop', function ($server, $worker_id) {});
$this->server->on('open', function ($server, $request) {});
$this->server->on('Request', array($this, 'onRequest'));
$this->server->start();
}
public function onWorkerStart($server, $worker_id)
{
$config = [
'host' => '127.0.0.1', //服务器地址
'port' => 3306, //端口
'user' => 'root', //用户名
'password' => 'root', //密码
'charset' => 'utf8', //编码
'database' => 'test', //数据库名
'prefix' => 'sethink_', //表前缀
'poolMin' => 5, //空闲时,保存的最大链接,默认为5
'poolMax' => 1000, //地址池最大连接数,默认1000
'clearTime' => 60000, //清除空闲链接定时器,默认60秒,单位ms
'clearAll' => 300000, //空闲多久清空所有连接,默认5分钟,单位ms
'setDefer' => true, //设置是否返回结果,默认为true,
];
$this->MysqlPool = new MysqlPool($config);
unset($config);
//执行定时器
$this->MysqlPool->clearTimer($server);
}
public function onRequest($request, $response)
{
$rs = Db::init($this->MysqlPool)
->name('tt')
->select();
var_dump($rs);
}
}
new Demo();
基本使用
查询
查询单条
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username,info')
->where(['username'=>'sethink','password'=>'sethink'])
->find();
查询多条
Db::init($this->MysqlPool)
->name('info')
->field('id,username,password,info')
->select();
添加
添加单条数据
$data = [
'username' => 'sethink2',
'password' => 'sethink2',
'info' => 'ceshi2'
];
Db::init($this->MysqlPool)
->name('user_info')
->insert($data);
批量添加
$data = [
[
'username' => 'sethink3',
'password' => 'sethink3',
'info' => 'ceshi3'
],
[
'username' => 'sethink4',
'password' => 'password4',
'info' => 'ceshi4'
]
];
Db::init($this->MysqlPool)
->name('user_info')
->insertAll($data);
更新数据
Db::init($this->MysqlPool)
->name('user_info')
->where(['username'=>'sethink4'])
->update(['password'=>'sethink4-4']);
删除数据
Db::init($this->MysqlPool)
->name('user_info')
->where(['username'=>'sethink4'])
->delete();
详解
init($server)
$server为swoole服务器
instance()
如果有特殊需求扩展无法实现,又想共用连接池时,譬如事务处理,此时可以通过instance获取一个连接
例子:
$mysql = Db::init($this->MysqlPool)->instance();
put($mysql)
配合instance使用,使用完连接后,将连接put回连接池里
例子:
$mysql = Db::init($this->MysqlPool)->instance();
$mysql->query('select * from `user_info`');
Db::init($this->MysqlPool)->put($mysql);
name($tableName)
$tableName为表名 -- 字符串
field($field)
$field为查询的字段名 -- 字符串
order($order)
order by排序 -- 数组(一维数组或者二维数组)
例子:
$order为一维数组时
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->order(['id'=>'desc'])
->select();
$order为二维数组时
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->order([['id'=>'desc'],['info'=>'asc']])
->select();
group($group)
group by分组 -- 字符串
例子:
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->group('info')
->select();
### having($having)
用于配置group从分组中筛选数据 -- 字符串
例子:
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->group('info')
->having('count(info) > 5')
->select();
distinct($distinct)
数据去重
$distinct为bool值
例子:
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->distinct(true)
->select();
lock($state)
加锁
例子:
//1、传入bool值
Db::init($this->MysqlPool)
->name('user_info')
->where(['id'=>1])
->lock(true)
->find();
//会自动在sql语句加上FOR UPDATE
//2、传入字符串
Db::init($this->MysqlPool)
->name('user_info')
->where(['id'=>1])
->lock('lock in share mode')
->find();
//特殊锁要求
fetchSql()
获取sql语句
例子:
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->fetchSql()
->select();
where($whereArray)
$whereArray为数组
例子1:
//1、
$where = [
'id'=>'1'
];
//2、
$where = [
'id'=>['>',5]
];
//3、
$where = [
'username'=>['LIKE','%seth%']
];
//4、
$where = [
'id'=>['in',['1','5']]
];
//5、
$where = [
'note_info'=>['=','sethink','or']
];
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->where($where)
->select();
Db::init($this->MysqlPool)
->name('user_info')
->field('id,username')
->where(['id'=>['>',5]])
->where(['id'=>['<=',10]])
->select();
find()
查询一条数据,返回一维数组
select()
查询一条或多条数据,返回二维数组
insert($data)
插入单条数据
$data为一维数组
insertAll($data)
插入多条数据
$data为二维数组
update($data)
更新数据
$data为一维数组
delete()
删除数据
query($sql)
执行sql语句 -- 字符串
例子:
$sql = 'select * from `user_info`';
Db::init($this->MysqlPool)->query($sql);
setDefer($bool)
部分操作,例如insert,update等,如果不需要返回结果,则可以设置为false。
相对于$bool为true,sql执行后,由于主进程和协程间不需要再通信,可以立即往下执行程序
也可以全局设置,添加配置
$config = [
'setDefer' => true //设置是否返回结果,默认为true
];
$this->MysqlPool = new MysqlPool($config);
//此操作不会返回结果
Db::init($this->MysqlPool)
->name('user_info')
->setDefer(false)
->insert(['username'=>'sethink_5']);
swoole mysql 协程_swoole-orm: 基于swoole的mysql协程连接池,简单封装。实现多个协程间共用同一个协程客户端。参考thinkphp-orm...相关推荐
- 【MySQL】Spring Boot项目基于Sharding-JDBC和MySQL主从复制实现读写分离(8千字详细教程)
目录 前言 一. 介绍 二. 主从复制 1. 原理 2. 克隆从机 3. 克隆从机大坑 4. 远程登陆 5. 主机配置 6. 从机配置 7. 主机:建立账户并授权 8. 从机:配置需要复制的主机 9. ...
- mysql修改工资字段_基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎)...
基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎) 前言 本篇是基于Linux下针对MySQL表结构的修改,MySQL索引的操作以及MySQL数据引擎的配置和说明. ...
- centos基础镜像做mysql镜像_使用docker 基于centos7制作mysql镜像
说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我. 一.yum方式安装mysql 1.编写dockerfile文件 ...
- java 连接池连接mysql数据库需要哪些jar包_DBCP-基于Java8导入DBCP连接池所需JAR包并编写DBCPUtils工具类...
上述五个jar包缺一不可 下载解压后,进入解压出的文件夹 将这五个jar包复制出来放入自己创建的myJar文件夹中(myJar文件夹创建与说明) 接下来就可以在工程中进行使用package utils ...
- mysql实现日志系统_基于Hadoop/CloudBase/MySQL的日志分析系统的设计与实现
Design and Implementation of Log Analysis System Based on Hadoop/CloudBase/MySQL ZHUO Haiyi 1 卓海艺(19 ...
- mysql服务器的搭建_基于linux的Mysql服务器的搭建
1.查看当前LINUX系统的版本 cat /etc/redhat-release 2.下载当前版本对应mysql安装包 MYSQL-server MYSQL-client MYSQL-devel 3. ...
- java 向 mysql数据库存储图片_基于java向mysql数据库中存取图片
import java.io.*; import java.sql.*; import java.sql.DriverManager; import java.sql.ResultSet; impor ...
- 基于mysql实现的网站_基于JavaScript和MySQL的文化平台网站的设计与实现
摘要 中国文化源远流长,自古就有文人雅士作诗赋词,舞文弄墨,尽显风雅.现今则有歌手作家思想成文,心绪为曲,亦现儒雅.文化是传承的,是流传不息的,也是众多人所追求的.从各种各样的文化中,我们提升自己,丰 ...
- php与MYSQL制作学生成绩系统,基于PHP和mysql的简单学生成绩管理系统
本系统主要架构图如上图所示.PS:register_check.php的自动注册代码写在check.php里了. 使用数据库的两张表,user_info用户信息表和stu_info学生成绩信息表. 提 ...
最新文章
- [转] 新入社員の自己紹介
- Security Wheel 安全环
- 平安金管家显示连接服务器失败,平安金管家平安run上传步数失败请更换原设备手机详细解决教程...
- Failed to connect to SDP server on FF:FF:FF:00:00:00: Connection refused问题解决方法
- 【Qt】QModbusServer类
- [html] 给“测试投影”几个字添加立体投影的效果
- uni-ui介绍uni-api
- 这么做科研你也能成功!
- python3列表推导式矩阵转置_python3进阶之推导式1之列表(list)推导式(comprehensions)...
- 如何通过三视图判断立方体个数_装机小白看过来:如何通过显卡参数来判断高端低端?...
- HTTPS加密原理(转)
- Spring Boot实践——Spring AOP实现之动态代理
- 背景建模之codebook算法
- python打印万年历_你会用Python打印一个万年历吗?像月历一样好看!
- 阿里云华为云对比分析
- linux 指令熟悉
- SSL证书的几个误解,正确认识SSL证书
- java 时间格式 外语,java-如何使用ERA设置日语的英语日期格式
- Proteus和Keil两个软件的联合使用
- 大数据扫黄,是怎样发现你的?