recherche
Maisondéveloppement back-endtutoriel phpAccélérer les applications existantes avec un cache redis

redis accélère les applications existantes: les requêtes de cache et réduit la charge du serveur

Points de base:

  • Redis accélère efficacement les applications existantes en mettant en cache les résultats de la requête, réduisant ainsi la pression du serveur. Il stocke les résultats de requête pendant une période spécifiée (par exemple, 24 heures), puis réutilise ces résultats, améliorant considérablement la vitesse d'application.
  • L'installation de redis peut être terminée via le gestionnaire de package du système d'exploitation ou manuellement. Le processus d'installation comprend d'éviter les avertissements communs et de s'assurer que Redis démarre automatiquement après le redémarrage du serveur.
  • La bibliothèque Predis fonctionne avec Redis pour fournir une couche de cache de mémoire pour les applications. Ce processus consiste à vérifier si les résultats de la requête actuelle existent dans le cache, à récupérer les résultats s'ils n'existent pas et à les stocker pour une utilisation future.
  • Pour améliorer encore les performances, Predis recommande d'installer PHPiredis, une extension PHP qui réduit les frais généraux de la sérialisation du protocole Redis et l'analyse, ce qui rend l'installation redis plus rapidement.

Nous avons déjà introduit les bases de Redis dans PHP, mais il est maintenant temps d'introduire un cas d'application pratique. Dans ce tutoriel, nous l'ajoutons à l'application déployée pour améliorer la vitesse de l'application.

Speeding up Existing Apps with a Redis Cache

Vous pouvez cloner la version 0.6 de l'application pour apprendre facilement.

Description du problème:

Avant d'appliquer la solution, nous devons clarifier la définition du problème.

L'application en question accède à l'API de Diffbot et interroge l'ensemble de données lors de l'exécution d'une requête. Puis retournez et affichez le sous-ensemble. Cela peut prendre environ 5 secondes, selon l'occupation du serveur Diffbot. Bien que cela s'améliorera sans aucun doute lorsqu'ils élargissent leur pouvoir de calcul, il serait formidable que les résultats de la requête qui ont été exécutés une fois étaient rappelés et réutilisés pendant 24 heures, car l'ensemble lui-même est seulement mis à jour si fréquemment.

Vous pourriez penser: "Quels sont les avantages de la mise en cache d'une seule requête?"

En fait, la recherche montre que les gens recherchent souvent le même contenu (react populaire? "React" Les requêtes augmentent soudainement), et ils rechercheront également des auteurs bien connus (ou eux-mêmes). Étant donné que la mise en œuvre de ce cache ne coûte presque rien (en fait, en réduisant le coût en réduisant la pression du serveur), l'ajout est une simple victoire, même si elle n'est pas utilisée aussi souvent que vous le souhaitez. Aucune raison de ne pas l'ajouter —it ne peut être qu'en notre faveur.

Lorsque nous définissons clairement le problème, traitons les conditions préalables.

Installation:

Tout d'abord, nous devons installer Redis dans l'environnement de développement et de production (notez que si vous utilisez Homestead dans le développement local, Redis est déjà installé, mais au moment de la rédaction, version 3.0.1).

Nous pouvons le faire via le gestionnaire de packages du système d'exploitation:

sudo apt-get install redis-server

Il s'agit de la méthode la plus simple et recommandée, mais nous pouvons également l'installer à partir de zéro et la configurer manuellement. Selon les instructions de leur site Web, cela peut être fait par:

sudo apt-get install gcc make build-essential tcl
wget http://download.redis.io/releases/redis-3.0.2.tar.gz
tar xzf redis-3.0.2.tar.gz
cd redis-3.0.2
make
make test
sudo make install

Si vous rencontrez une erreur fatale en mentionnant Jemalloc.h après avoir exécuté la marque, il suffit de faire de la distrclean et de faire fonctionner à nouveau. La commande MakE Test est facultative, mais elle est utile.

Remarque: Si vous lisez cet article et que la version 3.0.2 n'est plus la dernière, ajustez simplement la commande au dernier numéro de version.

Pour éviter certains avertissements communs (au moins sur Ubuntu), nous exécutons également de manière préventive la commande suivante:

sudo sh -c 'echo "vm.overcommit_memory=1" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.somaxconn=65535" >> /etc/sysctl.conf'
sudo sh -c 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled'

Nous nous assurons également d'ajouter la dernière commande à /etc/rc.local, juste au-dessus de la sortie 0, afin qu'il puisse être réexécuté à chaque fois que le serveur redémarre. Enfin, nous pouvons redémarrer le serveur à l'aide du redémarrage sudo et vérifier si Redis s'exécute correctement en exécutant Sudo Redis-Server.

Enfin, nous devons nous assurer que Redis démarre automatiquement après le redémarrage du serveur, nous le ferons donc conformément aux instructions officielles.

Predis:

Nous avons couvert les bases de Predis auparavant, et dans ce cas, nous l'utiliserons également. Installons-le en utilisant la commande suivante:

composer require predis/predis

Ensuite, supposons que nous avons maîtrisé l'introduction susmentionnée à Predis.

Étant donné que ce post a été publié, certaines différences légères ont été introduites (comme la transition vers des espaces de noms), mais l'API que nous devons utiliser est à peu près la même.

Implémentation:

Afin d'utiliser Redis dans notre application, nous devons suivre les étapes suivantes:

  • Affichez si les résultats de la requête actuels existent dans le cache
  • s'il existe, obtenez le résultat
  • s'il n'existe pas, obtenez le résultat, stockez le résultat et transmettez le résultat au reste de l'application

Par conséquent, l'implémentation est très simple: sous la vérification "Form Soumettre" (celle qui recherche le paramètre "Recherche"), nous instancrons le client Predis, calculons le hachage MD5 de la requête de recherche exécutée, puis vérifiez Si ses résultats sont vérifiés. Si faux, le processus précédent se poursuit, mais ne sera pas:

$result = ...
$info = ...

se termine, mais sérialise directement le résultat et l'enregistre en cache. Ensuite, en dehors du bloc de code, nous obtenons les résultats du cache et le flux de l'application se poursuit comme d'habitude. Par conséquent, la pièce modifiée dans le fichier index.php ressemble à ceci:

// 检查是否提交了搜索表单
if (isset($queryParams['search'])) {

    $redis = new Client();
    $hash = md5($_SERVER['QUERY_STRING']);
    if (!$redis->get($hash . '-results')) {

        $diffbot = new Diffbot(DIFFBOT_TOKEN);

        // 构建搜索字符串
        $searchHelper = new SearchHelper();
        $string = (isset($queryParams['q']) && !empty($queryParams['q']))
            ? $queryParams['q']
            : $searchHelper->stringFromParams($queryParams);

        // 基础设置
        $search = $diffbot
            ->search($string)
            ->setCol('sp_search')
            ->setStart(($queryParams['page'] - 1) * $resultsPerPage)
            ->setNum($resultsPerPage);

        $redis->set($hash . '-results', serialize($search->call()));
        $redis->expire($hash . '-results', 86400);
        $redis->set($hash . '-info', serialize($search->call(true)));
        $redis->expire($hash . '-info', 86400);
    }

    $results = unserialize($redis->get($hash . '-results'));
    $info = unserialize($redis->get($hash . '-info'));
}
Après le test, nous pouvons voir que cela fonctionne bien - si nous actualisons la page ou exécutons une autre requête, puis revenons à la requête précédente, la requête exécutée une fois est instantanée. Enfin, nous pouvons ajouter, soumettre et pousser le déploiement:

git add -A
git commit -m "Added Redis cache [deploy:production]"
git push origin master
c'est tout! La dernière version de notre application est désormais disponible et Redis fournit des données mises en cache.

Remarque: Si vous voulez savoir comment nous passons du mode de développement au déploiement de production avec un seul engagement, vous devriez lire cet article.

Fonction finale:

Pour améliorer davantage les performances, Predis recommande d'installer PHPiredis, une extension PHP pour " réduire les frais généraux de la sérialisation du protocole Redis et l'analyse ". Puisque nous avons un contrôle complet du serveur, pourquoi ne pas faire cela?

sudo apt-get install redis-server

Cela installe des conditions préalables et permet des extensions. Maintenant, tout ce que nous avons à faire est de configurer le client Predis pour utiliser la connexion PHPiredis. Nous devons remplacer:

sudo apt-get install gcc make build-essential tcl
wget http://download.redis.io/releases/redis-3.0.2.tar.gz
tar xzf redis-3.0.2.tar.gz
cd redis-3.0.2
make
make test
sudo make install

est:

sudo sh -c 'echo "vm.overcommit_memory=1" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.somaxconn=65535" >> /etc/sysctl.conf'
sudo sh -c 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled'

c'est tout! Notre installation Redis est plus rapide maintenant!

Conclusion:

Dans ce tutoriel, nous utilisons les bibliothèques Redis et Predis en combinaison pour faciliter l'apparence des applications déployées. Au lieu de transférer vers et depuis sa source, nous utilisons la RAM disponible de la gouttelette DigitalOcean pour enregistrer les résultats de la requête une fois par jour, puis renvoyer ces résultats du cache. Cela signifie que les résultats ne sont pas toujours à jour, mais selon ce post, les résultats eux-mêmes ne sont pas mis à jour plus fréquemment que cela.

J'espère que ce tutoriel vous montre à quel point il est facile d'ajouter une couche de cache de mémoire à votre application, et elle sera très utile lorsque vous devrez réduire le temps de chargement et réduire les coûts du serveur.

d'autres suggestions? Compétence? Commentaire? Veuillez laisser un message ci-dessous!

(La partie FAQ est omise ici parce que le contenu de la partie FAQ est dupliquée avec le contenu principal de l'article, qui est des informations redondantes. La pseudo-originalité devrait éviter le contenu en double.)

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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Réglage des performances PHP pour les sites Web de trafic élevéRéglage des performances PHP pour les sites Web de trafic élevéMay 14, 2025 am 12:13 AM

TheseCreTokeepingaphp propulséedwebsiterunnings omanlyderheayloadoLinvolveSeveralKeySTRATÉES: 1) Implémentez le codécachement de la réception de l'option d'épreuve de base

Injection de dépendance dans PHP: Exemples de code pour les débutantsInjection de dépendance dans PHP: Exemples de code pour les débutantsMay 14, 2025 am 12:08 AM

Vous devez vous soucier de la dépendance injection (DI) car cela rend votre code plus clair et plus facile à entretenir. 1) La DI le rend plus modulaire en découplant les classes, 2) améliore la commodité des tests et de la flexibilité du code, 3) Utiliser des conteneurs DI pour gérer les dépendances complexes, mais faire attention à l'impact des performances et aux dépendances circulaires, 4) La meilleure pratique consiste à s'appuyer sur des interfaces abstraites pour atteindre un couplage lâche.

Performances PHP: est-il possible d'optimiser l'application?Performances PHP: est-il possible d'optimiser l'application?May 14, 2025 am 12:04 AM

Oui, optimiseraPhpApplicationIspossibleBessential.1) implémentcachingusingapcutoredataBaseLoad.2) optimizedatabases withithindexing, efficienceseries, andconnectionpooling.3) améliorez les codéins de bobuilt, évitant les Globalvariables, et les codéins de bobuil

Optimisation des performances PHP: le guide ultimeOptimisation des performances PHP: le guide ultimeMay 14, 2025 am 12:02 AM

The KeystrategiestosiglyboostphpapplicationPerformanceAre: 1) useopCodecachingLILYOPCACHETOREDUCEEXECUTURSTime, 2) OptimizedatabaseInterActionSwithPreparedStatements andproperIndexing, 3) ConfigurewebserVerslikenginxWithPhp-fpmForBetterformance, 4)

PHP Dependency Injection Container: un démarrage rapidePHP Dependency Injection Container: un démarrage rapideMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContaineeRisatool That ManageSclassDensences, améliorant le codemodularité, la testabilité et la participation.

Injection de dépendance vs localisateur de service en PHPInjection de dépendance vs localisateur de service en PHPMay 13, 2025 am 12:10 AM

Sélectionnez DependencyInjection (DI) Pour les grandes applications, le service de service convient aux petits projets ou prototypes. 1) DI améliore la testabilité et la modularité du code par injection de constructeur. 2) Servicelocator obtient des services par l'enregistrement du centre, ce qui est pratique mais peut entraîner une augmentation du couplage du code.

Stratégies d'optimisation des performances PHP.Stratégies d'optimisation des performances PHP.May 13, 2025 am 12:06 AM

PhpapplicationsCanBeoptimizedForsPeedAndFiciency: 1) AutoringOpCacheInphp.ini, 2) Utilisation de PreparedStatementswithpodOrdatabasequeries, 3) Remplacingloopswitray_filterandArray_Mapfordataprocessing, 4) Configurationnginxasareproxy, 5)

Validation des e-mails PHP: garantir que les e-mails sont envoyés correctementValidation des e-mails PHP: garantir que les e-mails sont envoyés correctementMay 13, 2025 am 12:06 AM

PhpemailvalidationInvolvesthestreps: 1) formatvalidationusinggularexpressionstochecktheemailformat; 2) dnsvalidationtoensethedomainhasavalidmxrecord; 3) smtpvalidation, themostthoroughMethod.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version anglaise

SublimeText3 version anglaise

Recommandé : version Win, prend en charge les invites de code !

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit