Maison > base de données > Redis > le corps du texte

Pourquoi dit-on que Redis est très utile ?

王林
Libérer: 2021-03-03 09:36:23
avant
1754 Les gens l'ont consulté

Pourquoi dit-on que Redis est très utile ?

Avant-propos :

Je pense que pour la plupart des programmeurs, le middleware Redis devrait être très familier à tout le monde. Cependant, pour les programmeurs qui écrivent souvent du code métier au travail, ils ne peuvent utiliser que des valeurs définies, obtenir des valeurs et d'autres opérations dans le travail réel, et n'ont pas une compréhension globale de Redis. Maintenant, laissez-moi vous présenter Redis en détail.

Qu'est-ce que Redis ?

Redis est une base de données de stockage clé-valeur open source écrite en langage C. Il peut être utilisé dans des scénarios tels que la mise en cache, la publication et l'abonnement d'événements et les files d'attente à haut débit. Et prend en charge les types de données riches : string (string), hash (hash), list (list), set (ensemble non ordonné), zset (ensemble trié : ensemble ordonné)

Redis est dans le projet Scénarios d'application

1. La mise en cache des données

est la plus couramment utilisée. Les données qui doivent être interrogées fréquemment et qui changent rarement sont souvent appelées données chaudes.

2. La file d'attente des messages

est équivalente à un système d'abonnement aux messages, tel qu'ActiveMQ et RocketMQ. Si vous avez des exigences de cohérence plus élevées pour les données, il est toujours recommandé d'utiliser MQ)

3 Compteurs

Par exemple, en comptant le taux de clics et le taux de likes, redis est atomique et peut éviter les problèmes de concurrence.

4. Informations sur le site de commerce électronique

Les grandes plateformes de commerce électronique initialisent le cache des données de page. Par exemple, lors de l'achat d'un billet sur Qunar.com, le prix sur la page d'accueil sera différent du prix sur lequel vous cliquez.

5. Données des points chauds

Par exemple, les points chauds en temps réel sur les sites d'information, les recherches chaudes sur Weibo, etc. doivent être mis à jour fréquemment. Lorsque la quantité totale de données est relativement importante, les requêtes directement à partir de la base de données affecteront les performances

Donnez-moi une raison d'aimer

Sur un serveur à nœud unique, nous faisons généralement cela

Pourquoi dit-on que Redis est très utile ?

Avec le développement de l'entreprise et l'expansion de l'entreprise. Face à des données massives, l'utilisation directe de MySql entraînera une dégradation des performances, et la lecture et l'écriture des données seront également très lentes. Nous pouvons donc utiliser la mise en cache pour traiter des données massives.

Alors maintenant, nous sommes comme ceci :

Pourquoi dit-on que Redis est très utile ?

L'image ci-dessus ne décrit que brièvement le rôle du cache. Lorsque les données continuent d'augmenter, nous devons l'utiliser. technologie de réplication maître-esclave Pour obtenir une séparation en lecture-écriture

La couche de base de données interagit directement avec le cache. S'il y a des données dans le cache, elles sont directement renvoyées au client. Sinon, elles seront interrogées. MySql. Cela réduit la pression sur la base de données et améliore l'efficacité.

Habituellement, lorsqu'un nouveau téléphone mobile sort, il y a des ventes précipitées. Durant la même période, le serveur recevra de nombreuses demandes de commandes.

Nous devons utiliser les opérations atomiques de Redis pour implémenter ce "fil unique". Tout d’abord, nous stockons l’inventaire dans une liste. En supposant qu’il y ait 10 articles en inventaire, nous insérons 10 nombres dans la liste. Ce nombre n’a aucune signification pratique et ne représente que 10 articles en inventaire. Après le début de l'achat urgent, chaque fois qu'un utilisateur arrive, un numéro apparaîtra dans la liste, indiquant que l'achat urgent de l'utilisateur a réussi. Lorsque la liste est vide, cela signifie qu'elle a été supprimée. Parce que l'opération pop de la liste est atomique, même si de nombreux utilisateurs arrivent en même temps, ils seront exécutés séquentiellement

Digression : Certains achats précipités limitent directement les requêtes sur la page front-end. interceptés par le front-end et ne sont pas vers le serveur backend

Pourquoi Redis est-il si rapide ?

1. Redis est une opération de mémoire pure. Nous devons la conserver manuellement sur le disque dur en cas de besoin

2. Redis est monothread, évitant ainsi les opérations fréquentes de changement de contexte. multi-threads.

3. Redis a une structure de données simple et des opérations de données relativement simples

4. Les modèles sous-jacents sont différents, et les méthodes d'implémentation sous-jacentes et les protocoles d'application pour la communication avec le client sont différents. , Redis construit directement son propre mécanisme de VM, car si le système général appelle les fonctions système, il perdra un certain temps à se déplacer et à demander

5. Utiliser un modèle de multiplexage d'E/S multicanal, non- blocage des E/S O

Multiplexage d'E/S multiples : la technologie de multiplexage d'E/S est une technologie qui semble résoudre le problème des processus ou des threads bloquant un certain appel système d'E/S. Elle peut surveiller plusieurs descripteurs. Une fois qu'un certain descripteur est prêt (généralement prêt à lire ou à écrire, c'est-à-dire avant que le descripteur de fichier n'effectue des opérations de lecture et d'écriture), le programme peut être invité à effectuer les opérations de lecture et d'écriture correspondantes

(Apprentissage partage vidéo : tutoriel vidéo Redis)

Scénarios d'application des types de données Redis

Comme mentionné précédemment, Redis prend en charge cinq types de données riches, alors comment devrions-nous choisir dans différents scénarios ?

String

String est le type de données le plus couramment utilisé. Il peut stocker tout type de chaîne, y compris des objets binaires, codés en JSON et même des images codées en base64. La capacité maximale d'une chaîne dans Redis est de 512 Mo, ce qui peut être considéré comme omnipotent.

Hachage

Il est souvent utilisé pour stocker des données structurées. Par exemple, il peut être utilisé pour stocker des identifiants d'utilisateur, des surnoms, des avatars, des points et d'autres informations dans les systèmes de forum. Si vous devez modifier les informations, il vous suffit de retirer la valeur via la clé, de la désérialiser, de modifier la valeur d'un élément, puis de la sérialiser et de la stocker dans Redis. La structure de hachage est stockée car la structure de hachage le sera. modifié lorsqu'un seul élément de hachage est inférieur à un certain nombre de stockage compressé, vous pouvez donc économiser beaucoup de mémoire. Cela n'existe pas dans la structure String.

List

List est implémenté comme une liste doublement chaînée, qui peut prendre en charge la recherche inversée et le parcours, ce qui la rend plus pratique à utiliser. Cependant, elle entraîne une surcharge de mémoire supplémentaire dans Redis. , Y compris la file d'attente du tampon d'envoi, etc., cette structure de données est également utilisée. De plus, vous pouvez utiliser la commande lrange pour implémenter la fonction de pagination basée sur Redis, qui offre d'excellentes performances et une bonne expérience utilisateur.

Set

Les fonctions externes fournies par set sont similaires à list. La particularité est que set peut automatiquement dédupliquer une liste de données, mais vous ne le souhaitez pas. Lorsque des données en double apparaissent, vous pouvez choisir d'utiliser set à ce moment-là.

Ensemble de tri

peut être trié en fonction du poids d'une certaine condition. Par exemple, vous pouvez créer une application de classement des données en fonction du nombre de clics.

Cohérence des données du cache Redis

Dans le vrai sens, il est impossible que les données de la base de données et les données mises en cache soient cohérentes. Les données sont divisées en deux catégories : la cohérence finale et la cohérence forte. . Si les exigences en matière de données dans l'entreprise doivent être fortes, la mise en cache ne peut pas être utilisée. Tout ce que le cache peut faire, c'est assurer la cohérence éventuelle des données.

Tout ce que nous pouvons faire, c'est assurer autant que possible la cohérence des données. Que la base de données soit supprimée en premier, puis le cache, ou que le cache soit supprimé en premier, puis la base de données, une incohérence des données peut se produire. Les opérations de lecture et d'écriture étant simultanées, nous ne pouvons pas garantir leur ordre. La stratégie de réponse spécifique doit encore être déterminée en fonction des besoins de l’entreprise, je n’entrerai donc pas dans les détails ici.

Expiration de Redis et obsolescence de la mémoire

Lorsque Redis stocke des données, nous pouvons définir son heure d'expiration. Mais comment supprimer cette clé ?

Au début, je pensais qu'il s'agissait d'une suppression programmée, mais plus tard, j'ai découvert que ce n'était pas le cas, car si sa suppression est programmée, une minuterie est nécessaire pour surveiller en permanence la clé, même si la mémoire. est publié, il consomme beaucoup de ressources CPU.

La suppression après expiration de Redis adopte une suppression régulière. La valeur par défaut est de détecter toutes les 100 ms. Si une clé expirée est rencontrée, la détection ici n'est pas une détection séquentielle, mais une détection aléatoire. Des poissons passeront-ils à travers le filet ? Évidemment, Redis a également pris cela en considération. Lorsque nous lisons/écrivons une clé expirée, la stratégie de suppression paresseuse de Redis sera déclenchée et la clé expirée sera supprimée directement

L'élimination de la mémoire fait référence à une partie des clés stockées par le. utilisateur Il peut être automatiquement supprimé par Redis, de sorte que les données ne peuvent pas être trouvées dans le cache. La mémoire de notre serveur est de 2G, mais avec le développement de l'activité, les données mises en cache ont dépassé les 2G. Mais cela n'affecte pas le fonctionnement de notre programme, car la mémoire visible du système d'exploitation n'est pas limitée par la mémoire physique. Peu importe si la mémoire physique n'est pas suffisante. L'ordinateur allouera un espace du disque dur comme mémoire virtuelle. C'est l'intention initiale de Redis de concevoir deux scénarios d'application : le cache et le stockage persistant

Panne du cache

Le cache n'est qu'une couche de protection ajoutée pour soulager la pression sur la base de données. la requête à partir du cache ne peut pas. Lorsque nous obtenons les données dont nous avons besoin, nous devons les interroger dans la base de données. Si les pirates ont l'habitude d'accéder fréquemment à des données qui ne sont pas dans le cache, alors le cache perdra son sens en un instant, la pression de toutes les requêtes tombera sur la base de données, ce qui provoquera des anomalies de connexion à la base de données.

Solution :

1. Configurez des tâches planifiées en arrière-plan pour mettre à jour activement les données mises en cache. Cette solution est simple à comprendre, mais lorsque les clés sont dispersées, l'opération reste quand même relativement compliquée

2. Mise en cache hiérarchique. Par exemple, en configurant deux couches de protection du cache, le cache de niveau 1 a un délai d'expiration court et le cache de niveau 2 a un délai d'expiration long. Lorsqu'une requête arrive, elle est d'abord recherchée dans le cache de niveau 1. Si les données correspondantes ne sont pas trouvées dans le cache de niveau 1, le thread est verrouillé. Ce thread récupère ensuite les données de la base de données et les met à jour au niveau 1. et caches de niveau 2. D'autres threads obtiennent

directement à partir du thread de niveau 2 3. Fournissez un mécanisme d'interception et maintenez une série de valeurs clés légales en interne. Lorsque la clé demandée n'est pas valide, elle sera renvoyée directement.

Avalanche de cache

Avalanche de cache signifie que le cache plante pour certaines raisons (telles qu'un temps d'arrêt, une suspension du service de cache ou une absence de réponse), ce qui entraîne un grand nombre de requêtes atteignant la base de données principale , provoquant ainsi le crash de la base de données, le crash de l'ensemble du système et un désastre, ce qui est la panne de cache mentionnée ci-dessus.

Pourquoi dit-on que Redis est très utile ?

Comment éviter les avalanches :

1 Ajoutez une heure effective aléatoire dans une certaine plage au cache et définissez différents délais d'expiration pour. des clés différentes, pour éviter par la même occasion un échec collectif.

2. Semblable à la solution de panne de cache, créez un cache secondaire et lisez les données du cache de copie lorsque le cache d'origine échoue.

3. Utilisez le verrouillage ou la mise en file d'attente pour éviter trop de requêtes de lecture et d'écriture sur le serveur en même temps.

Conclusion :

Redis a des performances extrêmement élevées, avec une vitesse de lecture de 110 000 fois/s et une vitesse d'écriture de 81 000 fois/s. Il prend en charge les transactions, les sauvegardes et les types de données riches.

Tout a deux faces, et Redis a aussi des défauts :

1 Puisqu'il s'agit d'une base de données en mémoire, la quantité de données stockées sur une seule machine est limitée et les développeurs doivent le faire. estimation à l’avance. Les données inutiles doivent être supprimées rapidement.

2. Après avoir modifié les données Redis, les données conservées sur le disque dur doivent être réajoutées au contenu. Cela prend beaucoup de temps et Redis ne peut pas fonctionner normalement pour le moment.

Lien original : https://www.pianshen.com/article/589052263/

Recommandations associées : Tutoriel de base de données 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!

Étiquettes associées:
source:pianshen.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal