Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk mengkonfigurasi kumpulan sambungan pangkalan data dalam thinkphp

Bagaimana untuk mengkonfigurasi kumpulan sambungan pangkalan data dalam thinkphp

王林
王林ke hadapan
2023-05-28 18:43:321801semak imbas

1. Apakah kumpulan sambungan pangkalan data

Sambungan pangkalan data tradisional ialah satu cara untuk menggunakan sumber sistem ia akan Ini membawa kepada masalah seperti pembaziran sumber sistem dan kelewatan tindak balas. Kumpulan sambungan pangkalan data ialah kaedah perkongsian sambungan yang menyimpan cache sambungan ke dalam kumpulan sambungan Berbilang benang boleh berkongsi sambungan dalam kumpulan sambungan yang sama, dengan itu mengurangkan penggunaan sumber sistem.

2. Cara mengkonfigurasi kumpulan sambungan pangkalan data dalam thinkphp

1 Tambahkan kandungan berikut pada fail konfigurasi aplikasi

return [
    //数据库配置信息
    'database' => [
        // 数据库类型
        'type'            => 'mysql',
        // 服务器地址
        'hostname'        => '127.0.0.1',
        // 数据库名
        'database'        => 'test',
        // 用户名
        'username'        => 'root',
        // 密码
        'password'        => '',
        // 端口
        'hostport'        => '',
        // 数据库连接参数
        'params'          => [
            // 数据库连接池配置
            \think\helper\Arr::except(\Swoole\Coroutine::getContext(),'__timer'),
        ],
        // 数据库编码默认采用utf8
        'charset'         => 'utf8',
        // 数据库表前缀
        'prefix'          => 'think_',
    ],
];

2 file index.php

use think\App;
use think\facade\Config;
use think\facade\Db;
use think\swoole\Server;
use think\swoole\websocket\socketio\Handler;
use think\swoole\websocket\Websocket;
use think\swoole\websocket\socketio\Packet;
use think\swoole\coroutine\Context;
use Swoole\Database\PDOPool;
use Swoole\Coroutine\Scheduler;

//定义应用目录
define('APP_PATH', __DIR__ . '/app/');

// 加载框架引导文件
require __DIR__ . '/thinkphp/vendor/autoload.php';
require __DIR__ . '/thinkphp/bootstrap.php';

// 扩展Loader注册到自动加载
\think\Loader::addNamespace('swoole', __DIR__ . '/thinkphp/library/swoole/');

// 初始化应用
App::getInstance()->initialize();

//获取数据库配置信息
$dbConfig = Config::get('database');

//创建数据库连接池
$pool = new PDOPool($dbConfig['type'], $dbConfig);

//设置连接池的参数
$options = [
    'min' => 5,
    'max' => 100,
];

$pool->setOptions($options);

//连接池单例模式
Context::set('pool', $pool);

//启动Swoole server
$http = (new Server())->http('0.0.0.0', 9501)->set([
    'enable_static_handler' => true,
    'document_root' => '/data/wwwroot/default/public/static',
    'worker_num' => 2,
    'task_worker_num' => 2,
    'daemonize' => false,
    'pid_file' => __DIR__.'/swoole.pid'
]);

$http->on('WorkerStart', function (swoole_server $server, int $worker_id) {

    //功能实现

});

$http->start();

Fungsi kod di atas adalah untuk membina kumpulan sambungan PDOPool dan menetapkan bilangan sambungan minimumnya kepada 5 dan bilangan sambungan maksimumnya kepada 100. Gunakan Konteks untuk menyimpan kumpulan sambungan dalam memori untuk digunakan oleh aplikasi thinkphp lanjutan.

3. Cara menggunakan kolam sambungan

Dalam proses menggunakan kolam sambungan, anda perlu memberi perhatian kepada perkara berikut:

  1. Kes tunggal mod kolam sambungan, fungsi berbeza menggunakan objek kolam sambungan yang sama untuk memastikan ketekalan parameter kolam sambungan.

  2. Jangan tutup MySQL serta-merta selepas menjalankan operasi pangkalan data, tetapi kembalikannya terus ke kolam sambungan. Kerana sambungan sebenarnya dimasukkan semula ke dalam kolam sambungan, bukan ditutup.

  3. Jangan anggap kolam sambungan sebagai "badan abadi", ia juga perlu dilepaskan Kaedah untuk melepaskan kolam sambungan ialah: $pool->close().

Berikut ialah contoh penggunaan pengumpulan sambungan:

<?php
namespace app\index\controller;

use think\Controller;
use Swoole\Database\PDOPool;

class Index extends Controller
{
    public function index()
    {
        //获取连接池
        $pool = \Swoole\Coroutine::getContext(&#39;pool&#39;);
        
        //从连接池中取出一个连接
        $connection = $pool->getConnection();
        
        //执行操作
        $result = $connection->query('SELECT * FROM `user`');
        
        //归还连接给连接池
        $pool->putConnection($connection);
        
        //返回结果
        return json($result);
    }
}

Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi kumpulan sambungan pangkalan data dalam thinkphp. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam