Avec l'expansion continue de l'entreprise, la pression de lecture et d'écriture de base de données augmente. Un seul nœud de base de données ne peut plus répondre aux besoins de l'entreprise. Par conséquent, un mécanisme de réplication maître-esclave est introduit pour diviser les données en plusieurs nœuds. l'efficacité de lecture et d'écriture de la base de données.
ThinkPHP6 est un framework PHP léger qui fournit un mécanisme de réplication maître-esclave Mysql simple et facile à utiliser pour aider les développeurs à mieux gérer la pression de lecture et d'écriture de la base de données.
Cet article explique comment utiliser le mécanisme de réplication maître-esclave Mysql dans ThinkPHP6.
1. Installer les dépendances
Avant d'utiliser le mécanisme de réplication maître-esclave Mysql, nous devons installer les packages de dépendances pertinents, notamment :
1 , version php7 .1 et supérieure
2, extension php pdo_mysql
3, extension redis (si vous devez utiliser des composants Redis)
if vous l'avez déjà installé. Pour les packages de dépendances ci-dessus, vous pouvez ignorer cette étape.
2. Configurez la base de données
Avant d'effectuer la réplication maître-esclave, nous devons d'abord configurer la base de données. Les informations de la base de données peuvent être configurées dans le fichier config/database.php dans le répertoire racine de l'application. Par exemple :
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, ], ], // 更多的数据库连接配置 ], ];
Dans la configuration ci-dessus, nous avons défini une connexion à la base de données nommée mysql. Parmi eux, le type représente le type de base de données, le nom d'hôte représente l'adresse du serveur de base de données, la base de données représente le nom de la base de données, le nom d'utilisateur représente le nom d'utilisateur de la base de données, le mot de passe représente le mot de passe de la base de données, le port hôte représente le port de la base de données, le jeu de caractères représente le jeu de caractères, le préfixe représente les données. préfixe de table et debug indique s'il faut activer le mode de débogage, déployer représente la configuration de déploiement du mécanisme de réplication maître-esclave.
Dans le déploiement, nous définissons la méthode de déploiement de la réplication maître-esclave. L'attribut type est multiple pour utiliser le déploiement multi-nœuds. ro représente un nœud en lecture seule et rw_separate représente une séparation lecture-écriture.
Il est à noter que si vous devez utiliser le mécanisme de réplication maître-esclave, vous devez configurer la réplication maître-esclave dans MySQL. Pour une configuration spécifique, veuillez vous référer à la documentation mysql.
3. Utilisez la réplication maître-esclave Mysql
En prenant les données de requête comme exemple, nous pouvons utiliser la méthode suivante pour implémenter le mécanisme de réplication maître-esclave :
use thinkacadeDb; // 从库查询 $res = Db::connect('mysql')->query("SELECT * FROM user", true); // 主库查询 $res = Db::connect('mysql')->master()->query("SELECT * FROM user", true);
Dans le code ci-dessus, nous utilisons d'abord la méthode connect de la classe Db pour nous connecter à la base de données mysql, puis utilisons la méthode query pour interroger les données. La réplication maître-esclave est réalisée en spécifiant le nom de la connexion dans la méthode connect. Lorsque le maître-esclave n'est pas spécifié, la base de données esclave est utilisée par défaut pour la requête. Lorsque la méthode master est utilisée pour spécifier la bibliothèque principale, la bibliothèque principale est interrogée.
Nous pouvons également spécifier le type d'opérations de lecture et d'écriture avant d'exploiter la base de données, par exemple :
use thinkacadeDb; // 读操作,自动选择从库 Db::connect('mysql')->read(); // 写操作,选择主库 Db::connect('mysql')->write();
Grâce à la méthode ci-dessus, nous pouvons facilement utiliser le maître-esclave Mysql mécanisme de réplication, pour améliorer l'efficacité de la lecture et de l'écriture de la base de données.
4. Utilisez les composants Redis pour mettre en cache les résultats des requêtes
En plus d'utiliser le mécanisme de réplication maître-esclave Mysql, nous pouvons également utiliser des composants Redis pour mettre en cache les résultats des requêtes. Les configurations pertinentes peuvent être effectuées dans 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, ], ], ];
Dans la configuration ci-dessus, nous avons défini un cache nommé redis. Parmi eux, type représente le type de cache, host représente l'adresse du serveur de cache, port représente le port du serveur de cache, password représente le mot de passe du serveur de cache, et ainsi de suite. Lors de l'utilisation du cache Redis, nous pouvons utiliser la méthode cache pour mettre en cache lors de l'interrogation des données, par exemple :
use thinkacadeDb; // 使用Redis缓存,缓存60秒 $res = Db::connect('mysql')->cache('user_cache', 60)->query("SELECT * FROM user", true);
Dans le code ci-dessus, nous utilisons la méthode cache pour mettre en cache les résultats de la requête, où user_cache est le cache clé, 60 est le temps de cache en secondes.
Grâce aux méthodes ci-dessus, nous pouvons mieux gérer la pression de lecture et d'écriture de la base de données et améliorer les performances du site Web.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!