


Quelles sont les étapes pour utiliser la connexion longue Redis en php
Cette fois, je vais vous présenter les étapes pour utiliser la connexion longue Redis en PHP, quelles sont les précautions pour que PHP utilise la connexion longue Redis, ce qui suit est un cas pratique, jetons un coup d'œil.
Adresse du projet php-redis sur github : https://github.com/phpredis/phpredis
Déclaration de la fonction pconnect
Où time_out indique combien de secondes le client sera inactif avant de se déconnecter. La fonction connection renvoie true en cas de succès et false en cas d'échec :
pconnect(host, port, time_out, persistent_id, retry_interval) host: string. can be a host, or the path to a unix domain socket port: int, optional timeout: float, value in seconds (optional, default is 0 meaning unlimited) persistent_id: string. identity for the requested persistent connection retry_interval: int, value in milliseconds (optional)
L'exemple suivant détaille la réutilisation des connexions pconnect.
$redis->pconnect('127.0.0.1', 6379); $redis->pconnect('127.0.0.1'); // 默认端口6379,跟上面的例子使用相同的连接。 $redis->pconnect('127.0.0.1', 6379, 2.5); // 设置了2.5秒的过期时间。将是不同于上面的新连接 $redis->pconnect('127.0.0.1', 6379, 2.5, 'x'); //设置了持久连接的id,将是不同于上面的新连接 $redis->pconnect('/tmp/redis.sock'); // unix domain socket - would be another connection than the four before.
Introduction à l'utilisation de pconnect
Une brève description de la méthode pconnect
Utilisez cette méthode Créez une connexion. La connexion ne sera pas fermée après l'appel de la méthode close. La connexion ne sera fermée qu'une fois le processus terminé.
[À vérifier] Si vous utilisez une connexion longue, l'élément de configuration du délai d'attente dans le fichier de configuration Redis doit être défini sur 0, sinon la connexion dans la connexion le pool expirera en raison d'un délai d'attente
Expliquez pconnect pour PHP-FPM
Une longue connexion ne se terminera qu'après la fin du processus PHP-FPM et le le cycle de viede la connexionC'est le cycle de vie du processus PHP-FPM.
Par rapport aux connexions plus courtes, une connexion Redis sera générée lors de chaque appel PHP-FPM. La représentation sur le serveur est un statut de connexion time_out excessif.
A l'inverse, les connexions longues, tous les CGI appelés par PHP-FPM ne partageront qu'une seule connexion longue, donc seul un nombre fixe de time_out sera généré.
Close longue connexion
peut appeler les méthodes close et unset, mais les deux sont très différentes :
- close La fonction sert uniquement à empêcher le processus PHP actuel d'effectuer des requêtes Redis, mais elle ne peut pas réellement fermer la longue connexion Redis. La connexion sera toujours réutilisée dans les requêtes ultérieures jusqu'à la fin du cycle de vie du processus FPM. Si proche ne détruit pas l'objet Redis, il le déconnecte simplement.
- non définies les variables seront détruites. Il convient également de noter que vous n'avez pas besoin de fermer si vous utilisez pconnect. Si le temps d'exécution du script actuel est très long, il occupera toujours une connexion.
Comment déterminer si Redis est actuellement connecté ?
Le problème équivalent est de déterminer si l'instance actuelle est valide en mode cas unique.
Il est d'usage d'appeler echo pour déterminer si la chaîne elle-même est renvoyée normalement, ou d'appeler ping pour voir si la valeur de retour est +PONG.
Mais vous devez être particulièrement prudent. Après la déconnexion de Redis, l'appel de echo et ping (renvoyant '+POMG') lèvera une exception. Il doit donc être géré via le mécanisme de capture d’exceptions.
Analyse du code des problèmes de réutilisation des connexions pconnect
Situation 1 : mode non singleton.
Explication : l'instance a et l'instance b partagent une connexion, et l'instance b modifie la connexion de l'instance a :
Donc, l'exemple suivant fait que la valeur finale de l'instance $a devient 2 , nécessite une attention particulière.
$a = pconnect(host, port, time_out); select(3); $a -> setex(id, 3); echo $a -> get(id); //之后执行下面的连接 $b = pconnect(host, port, time_out); select(2); $b->set(id,2) echo $a->get(id); //这个id操作的db变成了2,不再是之前的3了。因为这两个连接共用了一个连接通道。
Cas 2 : Mode Singleton.
Modifiez le code ci-dessus pour que a et b soient générés via getInstance. La condition préalable à la génération est de déterminer si l'instance actuelle existe. Le point de confusion du mode singleton est :
$a génère une instance à ce moment, $b est généré par l'instance de $a, puis modifie la connexion de $a. $a doit être l'instance modifiée de $b appelée. Identique à la situation deux.
Le code du mode singleton est le suivant :
public static function getInstance($db = 0) { if (!isset(self::$_instance)) { self::$_instance = new Redis(); } self::_connect(); self::$_instance->select($db); return self::$_instance; }
Les deux cas illustrent le problème de la réutilisation des connexions. Comment corriger ce bug ? Deux points :
1. Générez une seule instance pour chaque base de données.
2. Évitez les problèmes de réutilisation des connexions.
Le code peut donc être ajusté pour renvoyer un tableau singleton :
public static function getInstance($db = 0) { try{ if (isset(self::$_instance[$db]) && self::$_instance[$db]->Ping() == 'Pong') { return self::$_instance[$db]; } } catch (Exception $e) { } self::$_instance[$db] = new Redis(); self::_connect($db); return self::$_instance[$db]; }
Choses à noter
Éviter d'utiliser objets redis dans les variables membres de la classe Task.
Dans le mode singleton de redis, le délai d'expiration de time_out est déclaré. Si l'occasion de traitement Redis est une tâche et que l'intervalle entre les appels de tâche à Redis est relativement long. Lorsque l'intervalle est supérieur à time_out, redis se déconnectera et toutes les opérations sur redis échoueront. La solution est d'éviter cette méthode appelante et de l'exécuter en déclarant dynamiquement la classe redis sur le lieu de l'appel. Ce problème ne fait pas de distinction entre les connexions longues et les liens courts, et il s'agit d'une erreur dans la méthode appelante.
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
php+mysql pour implémenter des statistiques de clics publicitaires (avec code)
Que diriez-vous de l'outil chinois PHP class ChineseUtil Convertir les caractères chinois en Pinyin
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

AI Hentai Generator
Générez AI Hentai gratuitement.

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)

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

L'avenir de PHP sera réalisé en s'adaptant aux nouvelles tendances technologiques et en introduisant des fonctionnalités innovantes: 1) s'adapter aux architectures de cloud computing, de conteneurisation et de microservice, en prenant en charge Docker et Kubernetes; 2) introduire des compilateurs JIT et des types d'énumération pour améliorer l'efficacité des performances et du traitement des données; 3) Optimiser en continu les performances et promouvoir les meilleures pratiques.

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.
