Cet article présente principalement les idées sur la mise en œuvre de la mise en cache de la base de données PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Mise en cache des résultats des requêtes SQL Pourquoi mettre en cache les résultats des requêtes ? La mise en cache des résultats des requêtes peut considérablement améliorer le temps d'exécution des scripts et les besoins en ressources. La mise en cache des résultats des requêtes SQL vous permet également de post-traiter les données. Si vous utilisez un cache de fichiers pour stocker l'intégralité de la sortie du script (sortie HTML), cela risque de ne pas fonctionner. Lorsque vous exécutez une requête SQL, le processus de traitement diandian est : l -->Se connecter à la base de données l Préparer la requête SQL < -->l Envoyer la requête à la base de données l Obtenir le résultat de retour l Fermer la base de données La méthode de connexion ci-dessus est très gourmand en ressources et affecte négativement les performances du script. Cela ne peut être coordonné que par deux facteurs : l'obtention d'une grande quantité de données renvoyées et l'emplacement du serveur de base de données. Bien que les connexions continues puissent améliorer la charge lors de la connexion à la base de données, elles sont très gourmandes en ressources mémoire. Si une grande quantité de données est obtenue, la durée totale de stockage sera très courte. Créer une requête SQL : Les requêtes SQL (Structured Query Language) sont utilisées comme interface pour manipuler une base de données et son contenu. SQL peut être utilisé pour définir et modifier la structure d'une table, insérer des données dans la table et mettre à jour ou supprimer des informations dans la table. SQL est un langage utilisé pour communiquer avec les données. Dans la plupart des extensions de base de données PHP (MySQL, ODBC, Oracle, etc.), l'ensemble du processus est géré en transmettant des requêtes SQL à la base de données. Dans ce tutoriel, seule la langue sélectionnée est utilisée pour obtenir les données dans la base de données. Ces données seront mises en cache et utilisées ultérieurement comme source de données. Décidez quand mettre à jour le cache : Le cache peut prendre plusieurs formes en fonction des besoins du programme. Les 3 méthodes les plus courantes sont : l l > l 🎜>Vos besoins en matière de mise en cache peuvent être une combinaison d'un ou plus des principes ci-dessus. Ce didacticiel abordera les méthodes de déclenchement temporel. Cependant, dans un mécanisme de mise en cache complet, une combinaison des 3 méthodes sera utilisée. Résultats de la mise en cache :La mise en cache de base utilise les deux fonctions PHP serialize() et unserialize() (Annotation : ces deux fonctions représentent la sérialisation et la désérialisation). La fonction serialize() est utilisée pour stocker les valeurs PHP, ce qui garantit que le type et la structure de ces valeurs ne sont pas perdus. En fait, l'extension de session PHP utilise des variables sérialisées pour stocker la variable de session ($_SESSION) dans un fichier du système. La fonction unserialize() fait le contraire de l'opération ci-dessus et renvoie la chaîne sérialisée à sa structure et à son contenu de données d'origine. Dans cet exemple, prenons une boutique e-commerce. Le magasin dispose de deux tables de base, catégories et produits (voici le nom de la table de base de données d'origine. La table des produits peut changer chaque jour, mais les catégories restent statiques). Pour afficher les produits, vous pouvez utiliser un script de cache de sortie pour stocker les résultats HTML de sortie dans un fichier. Cependant, le tableau des catégories peut nécessiter un post-traitement. Par exemple, si toutes les catégories sont affichées via la variablecategory_id (obtenue via $_REQUEST['category_id']), vous souhaiterez peut-être mettre en évidence la catégorie actuellement sélectionnée. Structure des catégories de table FieldType KeyExtracategory_idcategory_namecategory_descriptionint(10) unsignedvarchar(255)textPRIauto_incremenDans cet exemple, la technologie de mise en cache déclenchée par le temps est utilisée pour définir l'expiration de la sortie SQL mise en cache après un certain temps. Dans cet exemple particulier, la période est de 24 heures. Exemple de sérialisation : l >l Exécuter la requête l --[if !supportLists]-->l !--[endif]-->Enregistrez le tableau sérialisé dans le fichier [php]view plaincopy Affichez le fichier sql_cache.txt, le contenu à l'intérieur peut être similaire à ceci : a:1:{ i:0;a:6:{i:0;s:1:"1";s:11:"category_id";s :1:"1";i:1;s:9:"Ordinateurs";s :13:"category_name";s:9:$file = 'sql_cache.txt'; $link = mysql_connect('localhost','username','password') or die (mysql_error()); mysql_select_db('shop') or die (mysql_error()); /* 构造SQL查询 */ $query = "SELECT * FROM categories"; $result = mysql_query($query) or die (mysql_error()); while ($record = mysql_fetch_array($result) ) { $records[] = $record; } $OUTPUT = serialize($records); $fp = fopen($file,"w"); // 以写权限的方式打开文件 fputs($fp, $OUTPUT); fclose($fp); Copier après la connexion "Ordinateurs" ;i:2;s:25:" Description des ordinateurs";s:20:"category_description" ;s :25:"Description pour les ordinateurs";}} Cette sortie est la représentation interne de ses variables et types. Supposons que vous utilisiez la fonction mysql_fetch_array() pour renvoyer un tableau indexé numérique et un tableau associé (c'est pourquoi les données semblent se produire deux fois), l'un avec l'index numérique et l'autre avec l'index de chaîne. Utilisation de la mise en cache :Pour utiliser la mise en cache, vous devez utiliser la fonction unserialize() pour restaurer les données à leur format et type d'origine. Vous pouvez utiliser la fonction file_get_contents() pour lire le contenu du fichier sql_cache.txt et l'attribuer à une variable. Attention : Cette fonction est valide en PHP4.3.0 et supérieur. Si vous utilisez une ancienne version de PHP, une méthode simple consiste à utiliser la fonction file() (lire le fichier entier dans un tableau, chaque ligne devient un tableau). La fonction implode() est utilisée pour concaténer les éléments du tableau en une chaîne puis utiliser unserialize() pour la désérialiser. // file_get_contents() adapté à PHP < 4.3.0 [php]view plaincopy Notez que $records est Une ligne d'un tableau (une colonne indexée numériquement qui contient les résultats d'une requête - chaque ligne est un nombre et une chaîne... quel gâchis). $file = 'sql_cache.txt'; $records = unserialize(implode('',file($file))); //现在你可以通过$records数组并且取得原始查询的数据: foreach ($records as $id=>$row) { print $row['category_name']."<br>"; } Copier après la connexion Cache ou non en fonction de l'heure dans cet exemple. Si l'horodatage de modification du fichier est supérieur à l'horodatage actuel moins l'horodatage d'expiration, alors le cache est utilisé, sinon le cache est mis à jour. l >l ; ; php] voir plaincopyAutres possibilités supplémentaires :l !--[endif]-->Stocker les résultats mis en cache dans des fichiers partagés mémoire pour une vitesse plus rapidel [endif]-->Ajouter une fonction pour exécuter SQL de manière aléatoire que ries et vérifiez si la sortie est cohérente avec le cache sortir. S'il est incohérent, mettez à jour le cache (la probabilité d'exécuter cette fonction peut être fixée à 1/100). Les algorithmes de hachage (tels que MD5()) peuvent aider à déterminer si une chaîne ou un fichier a changé. $file = 'sql_cache.txt'; $expire = 86400; // 24 小时 (单位:秒) if (file_exists($file) && filemtime($file) > (time() - $expire)) { // 取得缓存中的记录 $records = unserialize(file_get_contents($file)); } else { // 通过 serialize() 函数创建缓存 } Copier après la connexion Script : [php] voir plaincopy
|
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!