>  기사  >  PHP 프레임워크  >  ThinkPHP6에서 Mysql 마스터-슬레이브 복제 사용

ThinkPHP6에서 Mysql 마스터-슬레이브 복제 사용

王林
王林원래의
2023-06-20 23:57:081415검색

비즈니스가 지속적으로 확장됨에 따라 데이터베이스 읽기 및 쓰기에 대한 부담이 커지고 있습니다. 따라서 단일 데이터베이스 노드는 더 이상 비즈니스 요구를 충족할 수 없습니다. 따라서 데이터를 분할하여 데이터베이스 성능을 향상시키기 위해 마스터-슬레이브 복제 메커니즘이 도입되었습니다. 다중 노드 읽기 및 쓰기 효율성.

ThinkPHP6은 개발자가 데이터베이스 읽기 및 쓰기 부담을 더 잘 처리할 수 있도록 간단하고 사용하기 쉬운 Mysql 마스터-슬레이브 복제 메커니즘을 제공하는 경량 PHP 프레임워크입니다.

이 글에서는 ThinkPHP6에서 Mysql 마스터-슬레이브 복제 메커니즘을 사용하는 방법을 소개합니다.

1. 종속성 설치

Mysql 마스터-슬레이브 복제 메커니즘을 사용하기 전에

1, php7.1 이상 버전

2, php pdo_mysql 확장

3, redis를 포함한 관련 종속성 패키지를 설치해야 합니다. 확장 (Redis 구성 요소를 사용해야 하는 경우)

위 종속성 패키지를 이미 설치한 경우 이 단계를 건너뛸 수 있습니다.

2. 데이터베이스 구성

마스터-슬레이브 복제를 수행하기 전에 먼저 데이터베이스를 구성해야 합니다. 데이터베이스 정보는 애플리케이션 루트 디렉터리의 config/database.php 파일에서 구성할 수 있습니다. 예:

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,
            ],
        ],

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

위 구성에서는 mysql이라는 데이터베이스 연결을 정의했습니다. 그 중 type은 데이터베이스 유형을 나타내고, 호스트 이름은 데이터베이스 서버 주소를 나타내고, 데이터베이스는 데이터베이스 이름을 나타내고, 사용자 이름은 데이터베이스 사용자 이름을 나타내고, 비밀번호는 데이터베이스 비밀번호를 나타내고, 호스트 포트는 데이터베이스 포트를 나타내고, charset은 문자 집합을 나타내고, 접두사는 데이터를 나타냅니다. 테이블 접두사, 디버그는 디버깅 활성화 여부를 나타내고, 배포는 마스터-슬레이브 복제 메커니즘의 배포 구성을 나타냅니다.

배포에서는 다중 노드 배포를 사용하기 위해 마스터-슬레이브 복제 배포 방법을 정의합니다. ro는 읽기 전용 노드를 나타내고 rw_separate는 읽기-쓰기 분리를 나타냅니다.

마스터-슬레이브 복제 메커니즘을 사용해야 하는 경우 mysql에서 마스터-슬레이브 복제를 구성해야 한다는 점에 유의해야 합니다. 구체적인 구성에 대해서는 mysql 설명서를 참조하세요.

3. Mysql 마스터-슬레이브 복제 사용

쿼리 데이터를 예로 들면 다음 방법을 사용하여 마스터-슬레이브 복제 메커니즘을 구현할 수 있습니다.

use thinkacadeDb;

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

위 코드에서는 먼저 연결 방법을 사용합니다. Db 클래스를 사용하여 mysql 데이터베이스에 연결한 다음 쿼리 메서드를 사용하여 데이터를 쿼리합니다. 마스터-슬레이브 복제는 연결 메소드에 연결 이름을 지정하여 수행됩니다. master-slave를 지정하지 않으면 기본적으로 슬레이브 데이터베이스를 쿼리에 사용합니다. 마스터 메소드를 사용하여 기본 라이브러리를 지정하면 기본 라이브러리가 쿼리됩니다.

데이터베이스를 작동하기 전에 읽기 및 쓰기 작업 유형을 지정할 수도 있습니다. 예:

use thinkacadeDb;

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

위의 방법을 통해 Mysql 마스터-슬레이브 복제 메커니즘을 쉽게 사용하여 데이터베이스 읽기 및 쓰기 효율성을 향상시킬 수 있습니다.

4. Redis 구성 요소를 사용하여 쿼리 결과 캐시

Mysql 마스터-슬레이브 복제 메커니즘을 사용하는 것 외에도 Redis 구성 요소를 사용하여 쿼리 결과를 캐시할 수도 있습니다. 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,
        ],
    ],
];

위 구성에서는 redis라는 캐시를 정의했습니다. 그 중 type은 캐시 유형을 나타내고,host는 캐시 서버 주소를 나타내고,port는 캐시 서버 포트를 나타내고,password는 캐시 서버 비밀번호를 나타냅니다. Redis 캐시를 사용할 때 데이터를 쿼리할 때 캐시 메서드를 사용하여 캐시할 수 있습니다. 예:

use thinkacadeDb;

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

위 코드에서는 캐시 메서드를 사용하여 쿼리 결과를 캐시합니다. 여기서 user_cache는 캐시 키이고 60은 캐시입니다. 시간, 단위는 초입니다.

위의 방법을 통해 데이터베이스 읽기 및 쓰기 부담을 더 잘 처리하고 웹 사이트 성능을 향상시킬 수 있습니다.

위 내용은 ThinkPHP6에서 Mysql 마스터-슬레이브 복제 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.