La mise en cache est utilisée par de nombreux sites Web, en particulier lorsqu'il s'agit d'une concurrence élevée, la mise en cache est essentielle. Cet article est basé sur Phalapi pour expliquer l'utilisation réelle de Redis en cache. J'espère qu'il sera utile à tout le monde.
Avant-propos
Lorsque nous développons un projet, nous pouvons rencontrer de nombreux problèmes, tels que l'envoi de messages, l'envoi d'e-mails, l'envoi de messages texte et l'échec de la concurrence. tour Passons au cache couramment utilisé pour nous sauver. Parlons ensuite de l'utilisation réelle de Redis en cache pour résoudre des problèmes pratiques. Voici les connaissances de base basées sur redis et un bref aperçu du document d'extension redis de PhalApi. et lisez cette section.
1. Quels problèmes peuvent être résolus
Quand nous utilisons une technologie, bien sûr, nous l'utilisons pour résoudre des problèmes et alors. problèmes spécifiques pouvons-nous résoudre en utilisant la technologie de mise en cache Redis ?
1.1 Ensemble de résultats de mise en cache
Voici un exemple et vous comprendrez ce que signifie l'ensemble de résultats de mise en cache après l'avoir examiné
//从缓存redis的clubcache库中查询club表where条件是city,city值是$city $cache = DI()->redis->get_Time('club'.'city'.$city,'clubcache'); //如果查询到了就直接返回缓存的结果 if($cache){ return $cache; } //如果不存在从数据库里面获取结果然后存入redis缓存key的条件和取值时一样,最后一个参数为过期时间 $rs = $this->getORM()->select('*')->where('city',$city)->fetchAll(); DI()->redis->set_Time('club'.'city'.$city,$rs,'clubcache',600);
Ce que nous faisons ci-dessus est d'enregistrer les résultats pendant 600 secondes. Une nouvelle requête dans les 600 secondes obtiendra les mêmes résultats
1.2 Traitement de la file d'attente
Il existe une comparaison du temps utilisé par Redis. La fonction clé est sa file d'attente
Passons d'abord par quelques fonctions redis spéciales
//写入队列左边 set_lPush //写入队列左边 如果value已经存在,则不添加 set_lPushx //写入队列右边 set_rPush //写入队列右边 如果value已经存在,则不添加 set_rPushx //读取队列左边 get_lPop //读取队列右边 get_rPop //读取队列左边 如果没有读取到阻塞一定时间 get_blPop //读取队列右边 如果没有读取到阻塞一定时间 get_brPop
Par exemple, lorsque nous faisons des affaires comme le push de messages, l'e-mail et les SMS, nous avons besoin pour demander une interface tierce. La vitesse de requête est déterminée par le tiers. Par exemple, une interface push sur WeChat prend 200 ms si elle est intégrée à notre activité API, un énorme problème se posera. . Pour résoudre ce problème La solution au problème est que le processus de file d'attente est le suivant
Lorsque nous recevons une demande push de l'utilisateur
à gauche)
↓
Il y a un script PHP exécuté en arrière-plan qui lit la file d'attente (la lecture à droite est le dernier entré, dernier sorti, la lecture à gauche est le premier entré, premier sorti)
↓
Ensuite, exécutez la logique push de la réponse
Généralement, notre script est un cycle mort, ou une requête régulière du shell, nous utiliserons les données qui ne peuvent pas lire les données sont obstructives pour résoudre la solution à les incapables d'y aller. Le problème du recyclage de la valeur trop rapide
1.3 Stockage temporaire des données
Les données temporaires n'ont pas besoin de trop d'explications, un exemple suffit
Par exemple, nous obtenons le code de vérification, devons-nous stocker le code de vérification dans la bibliothèque ? Je pense que ce n'est pas nécessaire, et la base de données n'est pas facile à effectuer des opérations expirées. Nous ne pouvons juger que par nous-mêmes
Ensuite, nous. utilisez redis pour stocker le code de vérification dans redis, puis donner un délai d'expiration peut très bien résoudre ce problème
1.4 Base de données
L'utilisation de redis comme base de données est une utilisation relativement approfondie. Parlons-en. à propos de mes réflexions ici
Après tout le monde, les services peuvent être distribués, mais il n'est pas facile pour la plupart des bases de données d'être distribuées, ce qui conduit à l'assemblage et à l'empilement de nombreux systèmes dans la base de données. Bien sûr, vous pouvez. utilisez le cache pour stocker l'ensemble des résultats, mais cette solution est pratique et traite les symptômes plutôt que la cause première. En parlant de chaussures pour enfants, au cours de la discussion, nous avons trouvé une solution pratique, qui consiste à utiliser redis comme première base de données. et mysql comme base de données de métadonnées
Après avoir effectué cette opération, le serveur synchronisera automatiquement les données chaudes avec Redis et stockera les données froides dans MySQL. Lorsque les données froides sont utilisées et stockées dans Redis, la plupart des opérations de l'utilisateur. sont essentiellement basés sur des opérations Redis
Le coût d'une telle implémentation est relativement élevé. Il faut beaucoup de temps pour implémenter l'encapsulation de la synchronisation des données Redis, utiliser les requêtes Where, etc. Dans un stade ultérieur, je prévois de faire une extension générale
2. Utilisation standardisée
En fait, les catégories ci-dessus ont été presque couvertes D'accord. , pourquoi devez-vous publier un paragraphe séparé pour parler des spécifications ? Parce que le cache n'est pas comme une base de données. Lorsque vous aurez besoin de vérifier le cache, si toutes les données sont empilées dans une bibliothèque Redis, vous serez très surpris. douloureux
Mais redis prend en charge plusieurs bibliothèques, il a donc besoin d'un ensemble de spécifications pour les diviser. Ici, je vais partager comment je les utilise
0~10 bibliothèques sont utilisées comme bibliothèques professionnelles normales. c'est-à-dire les files d'attente push, les données temporaires et chaque bibliothèque. Par exemple, les données push WeChat existent dans 5 bibliothèques et les données push par courrier électronique existent dans 6 bibliothèques. Les données temporaires pour l'envoi de codes de vérification sont stockées dans 3. bibliothèques, etc. Si vous estimez que 10 bibliothèques ne suffisent pas Vous pouvez ajouter
plus de 10 bibliothèques selon l'activité en tant que bibliothèques de cache pour stocker les données de l'ensemble de résultats de chaque table, ou d'autres données
La convention de dénomination de toutes les clés doit avoir le type + Nom de la table + condition
Exemple d'analyse d'utilisation de la classe de cache de fichiers PHP
Mécanisme de mise en cache PHP
Analyse de l'échec du cluster Redis
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!