Maison  >  Article  >  développement back-end  >  utilisation de la mise en cache Phalapi et extension Redis

utilisation de la mise en cache Phalapi et extension Redis

*文
*文original
2017-12-23 16:28:552001parcourir

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


Recommandations associées :

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!

Déclaration:
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