亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Maison développement back-end tutoriel php Accélérer les applications existantes avec un cache redis

Accélérer les applications existantes avec un cache redis

Feb 17, 2025 am 11:03 AM

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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.

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 grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Porce de variable PHP expliquée Porce de variable PHP expliquée Jul 17, 2025 am 04:16 AM

Les problèmes et les solutions courants pour la portée de la variable PHP incluent: 1. La variable globale ne peut pas être accessible dans la fonction, et elle doit être transmise en utilisant le mot-clé ou le paramètre global; 2. La variable statique est déclarée avec statique, et elle n'est initialisée qu'une seule fois et la valeur est maintenue entre plusieurs appels; 3. Des variables hyperglobales telles que $ _get et $ _post peuvent être utilisées directement dans n'importe quelle portée, mais vous devez faire attention au filtrage s?r; 4. Les fonctions anonymes doivent introduire des variables de portée parents via le mot clé Utiliser, et lorsque vous modifiez les variables externes, vous devez passer une référence. La ma?trise de ces règles peut aider à éviter les erreurs et à améliorer la stabilité du code.

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP? Comment gérer les téléchargements de fichiers en toute sécurité dans PHP? Jul 08, 2025 am 02:37 AM

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contr?ler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contr?le de liste blanche; 2. Renommez le fichier à une cha?ne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Commentant le code en php Commentant le code en php Jul 18, 2025 am 04:57 AM

Il existe trois méthodes courantes pour le code de commentaire PHP: 1. Utiliser // ou # pour bloquer une ligne de code, et il est recommandé d'utiliser //; 2. Utiliser /.../ pour envelopper des blocs de code avec plusieurs lignes, qui ne peuvent pas être imbriquées mais peuvent être croisées; 3. Compétences combinées Commentaires tels que l'utilisation / if () {} / pour contr?ler les blocs logiques, ou pour améliorer l'efficacité avec les touches de raccourci de l'éditeur, vous devez prêter attention aux symboles de fermeture et éviter les nidification lorsque vous les utilisez.

Comment les générateurs fonctionnent-ils en PHP? Comment les générateurs fonctionnent-ils en PHP? Jul 11, 2025 am 03:12 AM

AgeneratorInphpisamemory-EfficientwaytoterateOrgedatasetsByyieldingValuesonEatatimeIntedofreturningThemallAtonce.1.GeneratorsUsEtheieldKeywordToproduceValuesondemand, ReducingMemoryUsage.2.TheyAreusefulForHandlingBigloops, ReadingLargeFiles, OR OR.

Conseils pour écrire des commentaires PHP Conseils pour écrire des commentaires PHP Jul 18, 2025 am 04:51 AM

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plut?t que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de taches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les co?ts de communication et améliorer l'efficacité de la maintenance du code.

Tutoriel d'installation rapide PHP Tutoriel d'installation rapide PHP Jul 18, 2025 am 04:52 AM

Toinstallphpquickly, usexAmpPonWindowsorHomebrewonMacos.1.onwindows, downloadAndInstallxAmppp, selectComponents, startapache et placefilesInhtdocs.2.

Comment accéder à un caractère dans une cha?ne par index en php Comment accéder à un caractère dans une cha?ne par index en php Jul 12, 2025 am 03:15 AM

En PHP, vous pouvez utiliser des crochets ou des accolades bouclées pour obtenir des caractères d'index spécifiques à la cha?ne, mais les crochets sont recommandés; L'index commence à partir de 0 et l'accès à l'extérieur de la plage renvoie une valeur nulle et ne peut pas se voir attribuer une valeur; MB_substr est nécessaire pour gérer les caractères multi-octets. Par exemple: $ str = "Hello"; echo $ str [0]; sortie h; et les caractères chinois tels que MB_substr ($ str, 1,1) doivent obtenir le résultat correct; Dans les applications réelles, la longueur de la cha?ne doit être vérifiée avant le boucle, les cha?nes dynamiques doivent être vérifiées pour la validité et les projets multilingues recommandent d'utiliser des fonctions de sécurité multi-octets uniformément.

Apprendre PHP: un guide du débutant Apprendre PHP: un guide du débutant Jul 18, 2025 am 04:54 AM

Toléarnphpeffective, startBySettingUpAlocalServerERironmentUsingToolsLILYXAMPPANDACODEDITERLIGHILLEVSCODE.1) INSTRUSITIONXAMPFORAPACHE, MYSQL, ANDPHP.2) USACODEDEDITORFORSYNTAXSUPPORT.3)

See all articles