


Accé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.
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')); }
git add -A git commit -m "Added Redis cache [deploy:production]" git push origin master
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!

Outils d'IA chauds

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.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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

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











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.

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 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.

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 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 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.

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.

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.
