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
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion

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'
Copier après la connexion
Copier après la connexion

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
Copier après la connexion

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 = ...
Copier après la connexion

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'));
}
Copier après la connexion
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
Copier après la connexion
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
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion

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'
Copier après la connexion
Copier après la connexion

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

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 semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Sujets chauds

Tutoriel Java
1673
14
Tutoriel PHP
1278
29
Tutoriel C#
1257
24
Expliquez le hachage de mot de passe sécurisé dans PHP (par exemple, Password_Hash, Password_verify). Pourquoi ne pas utiliser MD5 ou SHA1? Expliquez le hachage de mot de passe sécurisé dans PHP (par exemple, Password_Hash, Password_verify). Pourquoi ne pas utiliser MD5 ou SHA1? Apr 17, 2025 am 12:06 AM

Dans PHP, Password_Hash et Password_verify Les fonctions doivent être utilisées pour implémenter le hachage de mot de passe sécurisé, et MD5 ou SHA1 ne doit pas être utilisé. 1) Password_hash génère un hachage contenant des valeurs de sel pour améliorer la sécurité. 2) Password_verify Vérifiez le mot de passe et assurez-vous la sécurité en comparant les valeurs de hachage. 3) MD5 et SHA1 sont vulnérables et manquent de valeurs de sel, et ne conviennent pas à la sécurité de mot de passe moderne.

Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables? Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables? Apr 17, 2025 am 12:25 AM

Le type PHP invite à améliorer la qualité et la lisibilité du code. 1) Conseils de type scalaire: Depuis PHP7.0, les types de données de base sont autorisés à être spécifiés dans les paramètres de fonction, tels que INT, Float, etc. 2) Invite de type de retour: Assurez la cohérence du type de valeur de retour de fonction. 3) Invite de type d'union: Depuis PHP8.0, plusieurs types peuvent être spécifiés dans les paramètres de fonction ou les valeurs de retour. 4) Invite de type nullable: permet d'inclure des valeurs nulles et de gérer les fonctions qui peuvent renvoyer les valeurs nulles.

PHP et Python: différents paradigmes expliqués PHP et Python: différents paradigmes expliqués Apr 18, 2025 am 12:26 AM

PHP est principalement la programmation procédurale, mais prend également en charge la programmation orientée objet (POO); Python prend en charge une variété de paradigmes, y compris la POO, la programmation fonctionnelle et procédurale. PHP convient au développement Web, et Python convient à une variété d'applications telles que l'analyse des données et l'apprentissage automatique.

Comment empêchez-vous l'injection SQL en PHP? (Déclarations préparées, APD) Comment empêchez-vous l'injection SQL en PHP? (Déclarations préparées, APD) Apr 15, 2025 am 12:15 AM

L'utilisation de déclarations de prétraitement et l'APD dans PHP peut effectivement empêcher les attaques d'injection SQL. 1) Utilisez PDO pour vous connecter à la base de données et définir le mode d'erreur. 2) Créez des instructions de prétraitement via la méthode de préparation et transmettez des données à l'aide des espaces réservés et exécutez des méthodes. 3) Traitez les résultats de la requête et assurez la sécurité et les performances du code.

PHP et Python: exemples de code et comparaison PHP et Python: exemples de code et comparaison Apr 15, 2025 am 12:07 AM

PHP et Python ont leurs propres avantages et inconvénients, et le choix dépend des besoins du projet et des préférences personnelles. 1.Php convient au développement rapide et à la maintenance des applications Web à grande échelle. 2. Python domine le domaine de la science des données et de l'apprentissage automatique.

PHP: Gestion des bases de données et logique côté serveur PHP: Gestion des bases de données et logique côté serveur Apr 15, 2025 am 12:15 AM

PHP utilise les extensions MySQLI et PDO pour interagir dans les opérations de base de données et le traitement de la logique côté serveur, et traite la logique côté serveur via des fonctions telles que la gestion de session. 1) Utilisez MySQLI ou PDO pour vous connecter à la base de données et exécuter les requêtes SQL. 2) Gérer les demandes HTTP et l'état de l'utilisateur via la gestion de session et d'autres fonctions. 3) Utiliser les transactions pour assurer l'atomicité des opérations de base de données. 4) Empêcher l'injection de SQL, utiliser les connexions de gestion des exceptions et de clôture pour le débogage. 5) Optimiser les performances via l'indexation et le cache, écrivez du code très lisible et effectuez une gestion des erreurs.

Objectif de PHP: Construire des sites Web dynamiques Objectif de PHP: Construire des sites Web dynamiques Apr 15, 2025 am 12:18 AM

PHP est utilisé pour créer des sites Web dynamiques, et ses fonctions principales incluent: 1. Générer du contenu dynamique et générer des pages Web en temps réel en se connectant à la base de données; 2. Traiter l'interaction utilisateur et les soumissions de formulaires, vérifier les entrées et répondre aux opérations; 3. Gérer les sessions et l'authentification des utilisateurs pour offrir une expérience personnalisée; 4. Optimiser les performances et suivre les meilleures pratiques pour améliorer l'efficacité et la sécurité du site Web.

Choisir entre PHP et Python: un guide Choisir entre PHP et Python: un guide Apr 18, 2025 am 12:24 AM

PHP convient au développement Web et au prototypage rapide, et Python convient à la science des données et à l'apprentissage automatique. 1.Php est utilisé pour le développement Web dynamique, avec une syntaxe simple et adapté pour un développement rapide. 2. Python a une syntaxe concise, convient à plusieurs champs et a un écosystème de bibliothèque solide.

See all articles