Heim >PHP-Framework >Laravel >Laravel-Lernen: Implementierung der Konfiguration der Master-Slave-Lese-/Schreibtrennung

Laravel-Lernen: Implementierung der Konfiguration der Master-Slave-Lese-/Schreibtrennung

不言
不言Original
2018-08-08 16:16:243395Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Laravel-Lernen: Die Implementierung der Master-Slave-Lese-Schreib-Trennung hat einen gewissen Referenzwert. Ich hoffe, dass er für Sie hilfreich ist.

Finden Sie den folgenden Code in der Verbindungsfabrik von DB
.../vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php

/** 
 * Get the read configuration for a read / write connection. 
 * 
 * @param  array  $config 
 * @return array 
 */  
protected function getReadConfig(array $config)  
{  
    $readConfig = $this->getReadWriteConfig($config, 'read');  
      
    return $this->mergeReadWriteConfig($config, $readConfig);  
}  
  
/** 
 * Get a read / write level configuration. 
 * 
 * @param  array   $config 
 * @param  string  $type 
 * @return array 
 */  
protected function getReadWriteConfig(array $config, $type)  
{  
    if (isset($config[$type][0])) {  
        return $config[$type][array_rand($config[$type])];  
    }  
  
    return $config[$type];  
} 

/**
 * Merge a configuration for a read / write connection.
 *
 * @param  array  $config
 * @param  array  $merge
 * @return array
 */
protected function mergeReadWriteConfig(array $config, array $merge)
{
    return array_except(array_merge($config, $merge), ['read', 'write']);
}

Die Factory-Klasse führt Lesevorgänge durch, indem sie die gelesene DB-Konfiguration zufällig abruft. Daraus lässt sich ableiten, dass die DB-Konfiguration wie folgt aussehen sollte

'mysql' => [  
    'write'    => [  
        'host' => '192.168.1.180',  
    ],  
    'read'     => [  
        ['host' => '192.168.1.182'],  
        ['host' => '192.168.1.179'],  
    ],  
    'driver'    => 'mysql',  
    'database'  => 'database',  
    'username'  => 'root',  
    'password'  => '',  
    'charset'   => 'utf8',  
    'collation' => 'utf8_unicode_ci',  
    'prefix'    => '', 
]

Erweiterte Version , unterstützt mehrere Master und mehrere Slaves, unterstützt unabhängige Benutzernamen und Passwörter, die Konfiguration ist wie folgt

'mysql' => [  
    'write'    => [  
        [
            'host' => '192.168.1.180',
            'username'  => '',
            'password'  => '',
        ],  
    ],  
    'read'     => [  
        [
            'host' => '192.168.1.182',
            'username'  => '',
            'password'  => '',
        ],  
        [
            'host' => '192.168.1.179',
            'username'  => '',
            'password'  => '',
        ],  
    ],  
    'driver'    => 'mysql',  
    'database'  => 'database',     
    'charset'   => 'utf8',  
    'collation' => 'utf8_unicode_ci',  
    'prefix'    => '', 
]

Überprüfung
Aktivieren Sie das allgemeine Protokoll von MySQL und überwachen Sie es Das Protokoll ändert sich durch tail -f, um festzustellen, ob die Konfiguration wirksam ist

Empfohlene verwandte Artikel:

Funktionstests von Laravel: Testgetriebene Entwicklung (mit Code)

Das obige ist der detaillierte Inhalt vonLaravel-Lernen: Implementierung der Konfiguration der Master-Slave-Lese-/Schreibtrennung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn