Rumah  >  Artikel  >  rangka kerja php  >  Menggunakan replikasi tuan-hamba Mysql dalam ThinkPHP6

Menggunakan replikasi tuan-hamba Mysql dalam ThinkPHP6

王林
王林asal
2023-06-20 23:57:081415semak imbas

Dengan pengembangan perniagaan yang berterusan, tekanan membaca dan menulis pangkalan data semakin meningkat Satu nod pangkalan data tidak lagi dapat memenuhi keperluan perniagaan Oleh itu, mekanisme replikasi induk-hamba diperkenalkan untuk meningkatkan kecekapan data dengan memisahkan data kepada berbilang nod. Kecekapan membaca dan menulis pangkalan data.

ThinkPHP6 ialah rangka kerja PHP ringan yang menyediakan mekanisme replikasi induk-hamba Mysql yang ringkas dan mudah digunakan untuk membantu pembangun mengendalikan tekanan baca dan tulis pangkalan data dengan lebih baik.

Artikel ini akan memperkenalkan cara menggunakan mekanisme replikasi master-slave Mysql dalam ThinkPHP6.

1. Pasang dependensi

Sebelum menggunakan mekanisme replikasi master-slave Mysql, kita perlu memasang pakej dependensi yang berkaitan, termasuk:

1, php7.1 dan ke atas

2. php pdo_mysql extension

3. langkah.

2. Konfigurasikan pangkalan data

Sebelum melakukan replikasi master-slave, kita perlu mengkonfigurasi pangkalan data terlebih dahulu. Maklumat pangkalan data boleh dikonfigurasikan dalam fail config/database.php dalam direktori akar aplikasi. Contohnya:

return [
    // 默认使用的数据库连接配置
    'default' => env('database.driver', 'mysql'),

    // 数据库连接配置
    'connections' => [

        // mysql主从配置
        'mysql' => [
            'type' => 'mysql',
            'hostname' => '127.0.0.1',
            'database' => 'test',
            'username' => 'root',
            'password' => '123456',
            'hostport' => '3306',
            'charset' => 'utf8mb4',
            'prefix' => '',
            'debug' => true,
            'deploy' => [
                'type' => 'multiple',
                'ro' => [
                    ['hostname' => '127.0.0.1', 'database' => 'test', 'username' => 'root', 'password' => '123456', 'hostport' => '3307', 'charset' => 'utf8mb4',],
                    //['hostname' => '127.0.0.2', 'database' => 'test', 'username' => 'root', 'password' => '123456', 'hostport' => '3307', 'charset' => 'utf8mb4',],
                ],
                'rw_separate' => true,
            ],
        ],

        // 更多的数据库连接配置
    ],
];

Dalam konfigurasi di atas, kami menentukan sambungan pangkalan data bernama mysql. Antaranya, jenis mewakili jenis pangkalan data, nama hos mewakili alamat pelayan pangkalan data, pangkalan data mewakili nama pangkalan data, nama pengguna mewakili nama pengguna pangkalan data, kata laluan mewakili kata laluan pangkalan data, hostport mewakili port pangkalan data, charset mewakili set aksara, awalan mewakili data. awalan jadual, dan nyahpepijat mewakili sama ada untuk mendayakan Mod penyahpepijatan, gunakan mewakili konfigurasi penggunaan mekanisme replikasi induk-hamba.

Dalam penggunaan, kami mentakrifkan kaedah penggunaan replikasi induk-hamba Atribut jenis adalah berbilang untuk menggunakan penggunaan berbilang nod. ro mewakili nod baca sahaja, dan rw_separate mewakili pemisahan baca-tulis.

Perlu diingatkan bahawa jika anda perlu menggunakan mekanisme replikasi master-slave, anda perlu mengkonfigurasi replikasi master-slave dalam mysql. Untuk konfigurasi khusus, sila rujuk dokumentasi mysql.

3. Gunakan replikasi master-slave Mysql

Mengambil data pertanyaan sebagai contoh, kita boleh menggunakan kaedah berikut untuk melaksanakan mekanisme replikasi master-slave:

use thinkacadeDb;

// 从库查询
$res = Db::connect('mysql')->query("SELECT * FROM user", true);
// 主库查询
$res = Db::connect('mysql')->master()->query("SELECT * FROM user", true);

Dalam kod di atas, kita mula-mula Gunakan kaedah sambung kelas Db untuk menyambung ke pangkalan data mysql, dan kemudian gunakan kaedah pertanyaan untuk menanyakan data. Replikasi tuan-hamba dicapai dengan menyatakan nama sambungan dalam kaedah sambung. Apabila master-slave tidak ditentukan, pangkalan data slave digunakan untuk pertanyaan secara lalai. Apabila kaedah induk digunakan untuk menentukan perpustakaan utama, perpustakaan utama akan ditanya.

Kami juga boleh menentukan jenis operasi baca dan tulis sebelum mengendalikan pangkalan data, contohnya:

use thinkacadeDb;

// 读操作,自动选择从库
Db::connect('mysql')->read();
// 写操作,选择主库
Db::connect('mysql')->write();

Melalui kaedah di atas, kami boleh menggunakan mekanisme replikasi master-slave Mysql dengan mudah untuk menambah baik. membaca pangkalan data Kecekapan menulis.

4. Gunakan komponen Redis untuk cache hasil pertanyaan

Selain menggunakan mekanisme replikasi master-slave Mysql, kami juga boleh menggunakan komponen Redis untuk cache hasil pertanyaan. Konfigurasi yang berkaitan boleh dibuat dalam config/cache.php:

return [
    'default' => env('cache.driver', 'file'),
    'prefix' => '',
    'stores' => [
        'redis' => [
            'type' => 'redis',
            'host' => '127.0.0.1',
            'port' => 6379,
            'password' => '',
            'select' => 0,
            'timeout' => 0,
            'expire' => 0,
            'persistent' => false,
            'prefix' => '',
            'serialize' => true,
        ],
    ],
];

Dalam konfigurasi di atas, kami menentukan cache bernama redis. Antaranya, jenis mewakili jenis cache, hos mewakili alamat pelayan cache, port mewakili port pelayan cache, kata laluan mewakili kata laluan pelayan cache, dan sebagainya. Apabila menggunakan cache Redis, kita boleh menggunakan kaedah cache untuk membuat cache apabila membuat pertanyaan data, contohnya:

use thinkacadeDb;

// 使用Redis缓存,缓存60秒
$res = Db::connect('mysql')->cache('user_cache', 60)->query("SELECT * FROM user", true);

Dalam kod di atas, kami menggunakan kaedah cache untuk cache hasil pertanyaan, di mana user_cache ialah kunci cache dan 60 ialah masa Cache, dalam saat.

Melalui kaedah di atas, kami boleh mengendalikan tekanan baca dan tulis pangkalan data dengan lebih baik serta meningkatkan prestasi tapak web.

Atas ialah kandungan terperinci Menggunakan replikasi tuan-hamba Mysql dalam ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn