Comment utiliser MySQL pour le stockage de données dans Workerman
Nov 07, 2023 pm 04:23 PMComment utiliser MySQL pour le stockage de données dans Workerman
En tant que framework PHP Socket asynchrone hautes performances, Workerman est largement utilisé dans le développement de serveurs de communication réseau. Dans de nombreux projets pratiques, nous devons souvent utiliser MySQL pour le stockage et la gestion des données. Ci-dessous, nous présenterons comment utiliser MySQL pour le stockage de données dans Workerman et fournirons des exemples de code spécifiques.
1. Installez l'extension MySQL
Avant de commencer, nous devons nous assurer que l'extension MySQL a été installée. L'extension MySQL peut être installée via la commande suivante :
$ pecl install mysql
Si l'extension MySQL est déjà installée, vous pouvez ignorer cette étape.
2. établir une connexion MySQL
Avant d'utiliser MySQL pour le stockage de données, vous devez d'abord établir une connexion avec MySQL. Dans Workerman, nous pouvons établir une connexion MySQL via le code suivant :
<?php require_once __DIR__ . '/Workerman/Autoloader.php'; use WorkermanWorker; use WorkermanMySQLConnection; $worker = new Worker(); $worker->onWorkerStart = function() { $GLOBALS['db'] = new Connection('host', 'username', 'password', 'database'); }; Worker::runAll();
Dans le code ci-dessus, nous avons d'abord introduit l'Autoloader du framework Workerman et déclaré un objet Worker. Dans la fonction de rappel onWorkerStart de l'objet Worker, nous établissons une connexion MySQL en utilisant l'h?te, le nom d'utilisateur, le mot de passe et le nom de la base de données spécifiés. Stockez l'objet de connexion dans la variable globale $GLOBALS['db']
pour une utilisation dans le code suivant. $GLOBALS['db']
中,以便在后續(xù)的代碼中使用。
三、執(zhí)行SQL查詢語(yǔ)句
在建立了MySQL連接之后,我們就可以使用MySQL連接對(duì)象來(lái)執(zhí)行SQL查詢語(yǔ)句了。下面是一個(gè)簡(jiǎn)單的例子:
<?php use WorkermanWorker; use WorkermanMySQLConnection; $worker = new Worker(); $worker->onWorkerStart = function() { $GLOBALS['db'] = new Connection('host', 'username', 'password', 'database'); }; $worker->onMessage = function($connection, $data) { $res = $GLOBALS['db']->query('SELECT * FROM users'); if (!$res) { $connection->send('查詢失敗'); } else { $connection->send(json_encode($res)); } }; Worker::runAll();
在上述代碼中,我們?cè)赪orker對(duì)象的onMessage回調(diào)函數(shù)中執(zhí)行了一個(gè)查詢語(yǔ)句,查詢了名為users的表中的所有數(shù)據(jù)。如果查詢失敗,則返回"查詢失敗";否則將查詢結(jié)果使用json_encode函數(shù)進(jìn)行序列化,并發(fā)送給客戶端。
這只是一個(gè)簡(jiǎn)單的例子,實(shí)際應(yīng)用中,我們可以根據(jù)具體的需求,執(zhí)行各種SQL語(yǔ)句,如插入、更新、刪除等操作。
四、連接池優(yōu)化
在高并發(fā)的網(wǎng)絡(luò)應(yīng)用中,經(jīng)常需要用到連接池來(lái)優(yōu)化數(shù)據(jù)庫(kù)連接。Workerman框架提供了MySQL連接池的支持,可以有效地管理和復(fù)用MySQL連接。
以下是一個(gè)使用連接池的示例代碼:
<?php use WorkermanWorker; use WorkermanMySQLConnection; $worker = new Worker(); $worker->onWorkerStart = function() { $GLOBALS['db'] = new WorkermanMySQLPool('host', 'username', 'password', 'database'); }; $worker->onMessage = function($connection, $data) { $GLOBALS['db']->pop(function($db) use ($connection) { $res = $db->query('SELECT * FROM users'); if (!$res) { $connection->send('查詢失敗'); } else { $connection->send(json_encode($res)); } $db->push($db); }); }; Worker::runAll();
在上述代碼中,我們使用Workerman框架提供的連接池類WorkermanMySQLPool
來(lái)創(chuàng)建連接池對(duì)象。在onMessage回調(diào)函數(shù)中,使用$GLOBALS['db']->pop
方法從連接池中獲取一個(gè)連接,然后執(zhí)行查詢操作。最后使用$db->push
rrreee
Dans le code ci-dessus, nous avons exécuté une instruction de requête dans la fonction de rappel onMessage de l'objet Worker pour interroger toutes les données de la table nommée utilisateurs. Si la requête échoue, ??Query failed?? est renvoyé?; sinon, les résultats de la requête sont sérialisés à l'aide de la fonction json_encode et envoyés au client. ????Ceci n'est qu'un exemple simple. Dans une application réelle, nous pouvons exécuter diverses instructions SQL en fonction de besoins spécifiques, telles que l'insertion, la mise à jour, la suppression et d'autres opérations. ????4. Optimisation du pool de connexions????Dans les applications réseau à haute concurrence, les pools de connexions sont souvent utilisés pour optimiser les connexions aux bases de données. Le framework Workerman prend en charge le regroupement de connexions MySQL, qui permet de gérer et de réutiliser efficacement les connexions MySQL. ????Ce qui suit est un exemple de code utilisant le pool de connexions?: ??rrreee??Dans le code ci-dessus, nous utilisons la classe de pool de connexionsWorkermanMySQLPool
fournie par le framework Workerman pour créer un objet pool de connexions. Dans la fonction de rappel onMessage, utilisez la méthode $GLOBALS['db']->pop
pour obtenir une connexion à partir du pool de connexions, puis effectuez l'opération de requête. Enfin, utilisez la méthode $db->push
pour renvoyer la connexion au pool de connexions pour qu'elle puisse être utilisée par d'autres requêtes. ????5. Résumé????Grace à cet article, nous avons appris à utiliser MySQL pour le stockage de données dans Workerman. Tout d'abord, vous devez installer l'extension MySQL via la commande pecl install mysql, puis établir une connexion avec MySQL et exécuter l'instruction de requête SQL. Dans le cas d'une concurrence élevée, nous pouvons également utiliser des pools de connexions pour optimiser les connexions aux bases de données. J'espère que cet article pourra vous être utile et je vous souhaite un stockage fluide des données lorsque vous utilisez Workerman pour développer des applications réseau. ??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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

ToseCurelyConnectToAremotemysQlServer, Usesshtunneling, ConfigureMysqlForremoteAccess, Setfirewallrules et Considersslincryption . Premier, établianshtunnelwithssh-l3307: localhost: 3306User @ Remote-Server-NandConnectViamysql-H127.0.0.1-P3307.Second, Editmys

Pour réinitialiser le mot de passe racine de MySQL, veuillez suivre les étapes suivantes: 1. Arrêtez le serveur MySQL, utilisez SudosystemCTlStopmysql ou SudosystemctlStopMysQLD; 2. Démarrez MySQL en - Skip-Grant-Tables, exécutez SudomysQld-Skip-Grant-Tables &; 3. Connectez-vous à MySQL et exécutez la commande SQL correspondante pour modifier le mot de passe en fonction de la version, telle que Flushprivileges; alterUser'root '@' localhost'identifiedby'your_new

Lors de la gestion des valeurs nuls dans MySQL, veuillez noter: 1. Lors de la conception du tableau, les champs clés sont définis sur Notnull et les champs facultatifs sont autorisés nuls; 2. ISNULL ou ISNOTNULL doit être utilisé avec = ou! =; 3. Les fonctions IFNULL ou Coalesce peuvent être utilisées pour remplacer les valeurs par défaut d'affichage; 4. Soyez prudent lorsque vous utilisez des valeurs nulles directement lors de l'insertion ou de la mise à jour, et faites attention aux méthodes de traitement de la source de données et du cadre ORM. NULL représente une valeur inconnue et n'égale aucune valeur, y compris lui-même. Par conséquent, soyez prudent lorsque vous interrogez, comptez et connectez les tables pour éviter les données manquantes ou les erreurs logiques. L'utilisation rationnelle des fonctions et des contraintes peut réduire efficacement les interférences causées par NULL.

MySQLDump est un outil commun pour effectuer des sauvegardes logiques des bases de données MySQL. Il génère des fichiers SQL contenant des instructions de création et d'insertion pour reconstruire la base de données. 1. Il ne sauvegarde pas le fichier d'origine, mais convertit la structure de la base de données et le contenu en commandes SQL portables; 2. Il convient aux petites bases de données ou à la récupération sélective et ne convient pas à la récupération rapide des données de niveau TB; 3. 4. Utilisez la commande MySQL pour importer pendant la récupération et peut désactiver les vérifications des clés étrangères pour améliorer la vitesse; 5. Il est recommandé de tester régulièrement la sauvegarde, d'utiliser la compression et de régler automatiquement.

Allumez les journaux de requête lente MySQL et analysez les problèmes de performances localisés. 1. Modifiez le fichier de configuration ou définissez dynamiquement Slow_Query_Log et Long_Query_time; 2. Le journal contient des champs clés tels que Query_time, Lock_time, ROWS_EXAMINE pour aider à juger les goulots d'étranglement de l'efficacité; 3. Utilisez les outils MySqlDumpSlow ou Pt-Query-digest pour analyser efficacement les journaux; 4. Les suggestions d'optimisation incluent l'ajout d'index, d'éviter la sélection *, le fractionnement des requêtes complexes, etc. Par exemple, l'ajout d'un index à user_id peut réduire considérablement le nombre de lignes numérisées et améliorer l'efficacité de la requête.

GroupBy est utilisé pour regrouper les données par champ et effectuer des opérations d'agrégation, et avoir une utilisation est utilisée pour filtrer les résultats après le regroupement. Par exemple, l'utilisation de groupByCustomer_ID peut calculer la quantité de consommation totale de chaque client; L'utilisation d'avoir peut filtrer les clients avec une consommation totale de plus de 1 000. Les champs non agrégés après sélection doivent appara?tre dans GroupBY, et avoir peut être filtré conditionnellement à l'aide d'un alias ou d'expressions d'origine. Les techniques courantes incluent le comptage du nombre de chaque groupe, le regroupement de plusieurs champs et le filtrage avec plusieurs conditions.

Les transactions MySQL et les mécanismes de verrouillage sont essentielles pour le contr?le et le réglage des performances simultanés. 1. Lorsque vous utilisez des transactions, assurez-vous d'exciter explicitement et de maintenir les transactions à court pour éviter l'occupation des ressources et les ballonnements undolog en raison de longues transactions; 2. Les opérations de verrouillage incluent des verrous partagés et des verrous exclusifs, SELECT ... Forupdate Plus X Locks, SELECT ... LOCKINSHAREMODE plus les verrous S, les opérations d'écriture automatiquement et les index doivent être utilisés pour réduire la granularité des verrous; 3. Le niveau d'isolement est lisible de manière répétitive par défaut, adapté à la plupart des scénarios et les modifications devraient être prudentes; 4. L'inspection de blocage peut analyser les détails de la dernière impasse via la commande showEngineInNodbStatus, et les méthodes d'optimisation incluent l'ordre d'exécution unifié, augmentent les index et introduisent des systèmes de file d'attente.

La pagination MySQL est généralement mise en ?uvre en utilisant la limite et le décalage, mais ses performances sont médiocres sous un grand volume de données. 1. Limit contr?le le nombre de chaque page, le décalage contr?le la position de départ et la syntaxe est limitedoffsetm; 2. Les problèmes de performance sont causés par des enregistrements excessifs et la suppression des analyses de décalage, entra?nant une faible efficacité; 3. Les suggestions d'optimisation incluent l'utilisation de la pagination du curseur, de l'accélération d'index et du chargement paresseux; 4. Le curseur Paging localise le point de départ de la page suivante à travers la valeur unique du dernier enregistrement de la page précédente, en évitant le décalage, ce qui convient à l'opération "page suivante", et ne convient pas aux sauts aléatoires.
