nash-swf / storage
数据库和Redis操作工具,支持断线重连,支持SWOOLE和OPEN-SWOOLE协程连接池
2.0.1
2022-03-23 13:07 UTC
Requires
- php: >=8.1
- ext-pdo: *
- ext-redis: *
- catfan/medoo: ^2.1
Requires (Dev)
- openswoole/ide-helper: 4.10.0
Suggests
- ext-openswoole: >=4.4
- ext-swoole: >=4.4
README
介绍
数据库和redis操作工具,支持断线重连,支持SWOOLE协程,同时支持 swoole 4.4以上版本 和 openswoole 协程环境(协程环境下自动使用数据库连接池) 支持多连接实例配置,使用方法参考test案例
软件架构
并不强依赖swoole或openswoole扩展,普通环境下也可使用 基于medoo构建数据库操作工具类 基于Redis扩展构建redis操作工具类 详细API请参考对应工具文档
安装教程
compose require swf/storage
使用说明
<?php
require __DIR__ . '/vendor/autoload.php';
## 数据库操作
// 初始化数据库连接(协程环境自动使用连接池)
Swf\Storage\Database::initPool('default', [
'type' => 'mysql',
'host' => 'db',
'database' => 'test',
'username' => 'test',
'password' => 'test',
'port' => 3306,
'size' => 64,
]);
// 增
Swf\Storage\Database::instance('default')->insert('account', ['username' => 'nash', 'age' => 12,]);
// 最新插入id
var_dump(Swf\Storage\Database::instance('default')->id());
// 查
Swf\Storage\Database::instance('default')->get('account', '*', ['age' => 12,]);
// 改
Swf\Storage\Database::instance('default')->update('account', ['age' => 13], ['age' => 12,]);
// 删
Swf\Storage\Database::instance('default')->delete('account', ['age' => 13]);
// 协程中使用
Swoole\Coroutine\run(function () {
// 增
Swf\Storage\Database::instance('default')->insert('account', ['username' => 'nash', 'age' => 12,]);
// 最新插入id
var_dump(Swf\Storage\Database::instance('default')->id());
// 查
Swf\Storage\Database::instance('default')->get('account', '*', ['age' => 12,]);
// 改
Swf\Storage\Database::instance('default')->update('account', ['age' => 13], ['age' => 12,]);
// 删
Swf\Storage\Database::instance('default')->delete('account', ['age' => 13]);
});
<?php
require __DIR__ . '/vendor/autoload.php';
## redis操作
// 初始化数据库连接
Swf\Storage\Redis::initPool('default', [
'host' => 'redis',
'database' => 0,
'port' => 6379,
'size' => 64,
]);
Swf\Storage\Redis::instance('default')->set('name', 123123);
$data = Swf\Storage\Redis::instance('default')->get('name');
var_dump($data);
<?php
require __DIR__ . '/../vendor/autoload.php';
// 初始化数据库连接
Swf\Storage\Database::initPool('default', [
'type' => 'mysql',
'host' => 'db',
'database' => 'test',
'username' => 'test',
'password' => 'test',
'port' => 3306,
'size' => 64,
]);
// 初始化数据库连接
Swf\Storage\Database::initPool('default123', [
'type' => 'mysql',
'host' => 'db',
'database' => 'test',
'username' => 'test',
'password' => 'test',
'port' => 3306,
'size' => 64,
]);
// 协程中验证多数据库连接事务提交和回退。
// 由Transaction对象统一确定全部提交或全部回退
Swoole\Coroutine\run(function(){
try {
// 增
// 开启事务
Swf\Storage\Transaction::start();
// 使用多个数据库连接操作不同的内容
Swf\Storage\Database::instance('default')->insert('account', ['username' => 'nash', 'age' => 12,]);
Swf\Storage\Database::instance('default123')->insert('account', ['username' => 'nash', 'age' => 13,]);
# throw new Exception('错误内容');
// 事务提交(多个数据库操作均成功或均失败)
Swf\Storage\Transaction::complete();
} catch (Throwable $e) {
var_dump(1, $e->getTraceAsString());
}
});