Cet article partagera avec vous quelques questions d'entretien sur le cache Redis. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Questions d'entretien en cache Redis
1. Quelle est la différence entre Redis et Memcached ? Pourquoi Redis monothread est-il parfois plus efficace que Memcached multithread dans des conditions de concurrence élevée ?
Différence :
memcached peut mettre en cache des images et des vidéos. redis prend en charge plus de structures de données en plus de k/v ;
-
redis peut utiliser la mémoire virtuelle, redis peut être persistant et une reprise après sinistre, redis prend en charge la sauvegarde des données via maître-esclave
3. redis peut être utilisé comme file d'attente de messages.
Raison : Le modèle multithread memcached introduit la cohérence du cache et le verrouillage, et le verrouillage entraîne des pertes de performances.
2. Comment la réplication maître-esclave Redis est-elle implémentée ? Comment implémenter le mode cluster Redis ? Comment la clé Redis est-elle traitée ?
Implémentation de réplication maître-esclave : le nœud maître prend un instantané des données dans sa propre mémoire, envoie l'instantané au nœud esclave et le nœud esclave restaure les données dans la mémoire. Après cela, chaque fois que de nouvelles données sont ajoutées, le nœud maître envoie l'instruction au nœud esclave dans un format de journal binaire similaire à MySQL, et le nœud esclave reçoit l'instruction envoyée par le nœud maître pour la relecture.
Méthode de partitionnement :
- Partagement côté client
- Partagement basé sur un proxy
- Twemproxy
- codis
- Partage de requête d'itinéraire
- Redis-cluster Le corps fournit la possibilité de disperser automatiquement les données vers différents nœuds de RedisCluster. Le nœud dans lequel un certain sous-ensemble de données de l'ensemble de la collection de données est stocké est transparent pour l'utilisateur)
- redis- Principe de fragmentation du cluster : est un emplacement de longueur 16 384 (emplacement virtuel) dans Cluster, numéroté de 0 à 16 383. Chaque nœud maître sera responsable d'une partie des emplacements. Lorsqu'une certaine clé est mappée à un emplacement dont un maître est responsable, alors le maître est responsable de fournir des services pour cette clé. slot, il peut être spécifié par l'utilisateur, ou Il est généré automatiquement lors de l'initialisation, et seul le Maître est propriétaire du slot. Le nœud maître conserve une séquence de bits de 16 384/8 octets. Le nœud maître utilise des bits pour identifier s'il possède un certain emplacement. Par exemple, pour le slot numéroté 1, le Maître doit seulement déterminer si le deuxième bit de la séquence (index commençant à 0) est à 1. Cette structure facilite l'ajout ou la suppression de nœuds. Par exemple, si je souhaite ajouter un nouveau nœud D, je dois obtenir des emplacements des nœuds A, B et C vers D.
[Recommandations associées :
Tutoriel vidéo Redis]
3. Comment concevoir des verrous distribués à l'aide de Redis ? Parlez-moi de l'idée de mise en œuvre ? Est-il possible d'utiliser zk ? Comment y parvenir ? Quelle est la différence entre ces deux ?
redis :
- Thread Asetnx (horodatage tl lorsque l'objet verrouillé expire), si true est renvoyé, le verrou est obtenu.
- Le thread B utilise get pour obtenir t1, le compare avec l'horodatage actuel et détermine s'il a expiré. Sinon, il est faux. S'il expire, passez à l'étape. 3;
- Calculez le nouveau timeout t2, utilisez la commande getset pour renvoyer t3 (cette valeur peut avoir été modifiée par d'autres threads), si t1==t3, obtenez le verrou, si t1!=t3, le verrou a été acquis par d'autres threads.
- Après avoir acquis le verrou, traitez la logique métier, puis déterminez si le verrou a expiré. S'il n'a pas expiré, supprimez-le. il n'est pas nécessaire de le traiter (pour empêcher la suppression des verrous d'autres threads).
zk :
- Lorsque le client verrouille une méthode, dans le répertoire du nœud spécifié correspondant à la méthode sur zk , générer un unique nœud ordonné instantané node1 ;
- Le client obtient tous les nœuds enfants qui ont été créés sous le chemin. S'il constate que le numéro de séquence du nœud1 créé par lui-même est le plus petit, c'est le cas. considéré Ce client a acquis le verrou.
- S'il s'avère que le nœud 1 n'est pas le plus petit, il écoutera le nœud le plus grand avec un numéro de série plus petit que le nœud qu'il a créé et attendra.
- Après avoir acquis le verrou, traitez la logique et supprimez le nœud1 que vous avez créé. Différence : les performances de zk sont moins bonnes, la surcharge est importante et la mise en œuvre est simple.
4. Connaissez-vous la persistance de redis ? Comment la couche inférieure est-elle mise en œuvre ? Quels sont les avantages et les inconvénients ?
RDB (RedisDataBase : synchronise les instantanés générés par les données Redis sur les disques et autres supports à différents moments) : instantanés de la mémoire vers le disque dur, mis à jour régulièrement. Inconvénients : chronophage, consommateur de performances (opérations fork+io), perte de données facile.
AOF (AppendOnlyFile : enregistrez toutes les instructions exécutées par Redis. Au prochain redémarrage de Redis, il vous suffit d'exécuter les instructions) : Écrivez des journaux. Inconvénients : Grande taille, vitesse de récupération lente.
bgsave effectue la persistance complète de l'image et aof effectue la persistance incrémentielle. Parce que bgsave prendra beaucoup de temps et n'est pas suffisamment en temps réel, cela entraînera de nombreuses pertes de données lors de l'arrêt et nécessitera la coopération d'aof. Lorsque l'instance redis sera redémarrée, aof sera d'abord utilisé pour restaurer l'état de la mémoire. il n'y a pas de journal aof, il utilisera le fichier rdb pour restaurer. Redis réécrira régulièrement AOF et compressera la taille du journal du fichier AOF. Après Redis 4.0, il existe une fonction de persistance hybride, qui intègre la totalité de bgsave et l'incrément de aof, qui assure non seulement l'efficacité de la récupération mais prend également en compte la sécurité des données. Le principe de bgsave, fork et cow, fork signifie que redis effectue l'opération bgsave en créant un processus enfant, et cow signifie copyonwrite Une fois le processus enfant créé, les processus parent et enfant partagent le segment de données et le processus parent continue. fournir des services de lecture et d'écriture et écrire des pages sales. Les données seront progressivement séparées du processus enfant.
5. Quelles sont les stratégies d'expiration de redis ? Connaissez-vous l’algorithme LRU ? Écrire du code Java pour l'implémenter ?
Stratégie d'expiration :
Expiration programmée (une clé, une minuterie), expiration paresseuse : seulement lorsque la clé est utilisée, il est jugé si la clé a expiré, et c'est effacé à son expiration. Expiration périodique : un compromis entre les deux premiers.
LRU : newLinkedHashMap (capacité, DEFAULT_LOAD_FACTORY, true) ; le troisième paramètre est défini sur true, ce qui signifie que la liste liée est triée dans l'ordre d'accès et peut être utilisée comme cache LRU ; défini sur false pour trier dans l'ordre d'insertion , peut être utilisé comme cache FIFO
Implémentation de l'algorithme LRU :
est implémentée via une liste doublement chaînée et de nouvelles données est inséré en tête de la liste chaînée
-
Chaque fois que le cache est activé (c'est-à-dire que les données mises en cache sont accédées), les données sont déplacées vers la tête de la liste chaînée
- Lorsque la liste chaînée est pleine, les données à la fin de la liste chaînée sont supprimées.
LinkedHashMap : La combinaison de HashMap et d'une liste doublement chaînée est LinkedHashMap. HashMap n'est pas ordonné et LinkedHashMap garantit l'ordre des itérations en conservant une liste supplémentaire doublement chaînée. L’ordre d’itération peut être un ordre d’insertion (par défaut) ou un ordre d’accès.
6. Pénétration du cache, panne de cache, solution d'avalanche de cache ?
** Pénétration du cache : ** fait référence à l'interrogation d'une donnée qui ne doit pas exister. Si les données ne peuvent pas être trouvées à partir de la couche de stockage, elles ne seront pas écrites dans le cache. ces données inexistantes à chaque fois. Toutes les requêtes doivent être adressées à la base de données pour une requête, ce qui peut entraîner le blocage de la base de données.
Solution :
- Les données renvoyées par la requête sont vides. Ce résultat vide est toujours mis en cache, mais le délai d'expiration sera plus court
- Filtre Bloom : hachez toutes les données possibles dans un bitmap suffisamment grand. Les données qui ne doivent pas exister seront interceptées par ce bitmap, évitant ainsi les requêtes DB.
** Panne du cache : ** Pour une clé avec un délai d'expiration défini, lorsque le cache expire à un certain moment, il se produit un grand nombre de requêtes simultanées pour cette clé à ce moment-là. Dans le passé, lorsque ces requêtes constataient que le cache avait expiré, elles chargeaient généralement les données de la base de données principale et les réinitialisaient dans le cache. À ce moment-là, des requêtes simultanées volumineuses pouvaient instantanément submerger. la base de données.
Solution :
- Utilisez un verrou mutex : lorsque le cache échoue, n'allez pas immédiatement sur Ioaddb, utilisez d'abord setnx tel que Redis pour définir un verrou mutex Quand. l'opération est renvoyée avec succès, effectuez l'opération Ioaddb et restaurez le cache. Sinon, réessayez la méthode get cache.
- N'expire jamais : il n'expire pas physiquement, mais il expire logiquement (actualisations de thread asynchrones en arrière-plan). Avalanche de cache : le même délai d'expiration est utilisé lors de la configuration du cache, provoquant l'expiration du cache en même temps à un certain moment, toutes les demandes sont transmises à la base de données, et la base de données est sous pression instantanée et provoque une avalanche. La différence avec la panne de cache : l'avalanche, c'est beaucoup de clés, la panne est un certain cache de clés.
Solution :
Répartissez le délai d'expiration du cache, par exemple, vous pouvez ajouter une valeur aléatoire au délai d'expiration d'origine, par exemple 1 à 5 minutes de manière aléatoire, comme Ceci Le taux de répétition du délai d'expiration de chaque cache sera réduit, ce qui rendra difficile la survenue d'événements de défaillance collective.
7. Lors du choix du cache, quand choisir redis et quand choisir memcached
Lors du choix de redis :
- Complexe structure de données, les données de valeur sont un hachage, une liste, un ensemble, un ensemble ordonné, etc. Dans ce cas, redis sera choisi car memcache ne peut pas satisfaire ces structures de données. Le scénario d'utilisation le plus typique est la liste de commandes des utilisateurs, les messages utilisateur, les commentaires de publication. , etc.
- La fonction de persistance des données est requise, mais veillez à ne pas utiliser Redis comme base de données. Si Redis se bloque, la mémoire peut restaurer rapidement les données chaudes et ne fera pas pression instantanément sur la base de données. . Il n'y a pas de processus de préchauffage du cache. Pour les scénarios où les exigences de lecture seule et de cohérence des données ne sont pas élevées, le stockage persistant
- peut être utilisé pour la haute disponibilité. Redis prend en charge les clusters et peut réaliser une réplication active et une séparation en lecture-écriture. memcache, si vous souhaitez obtenir une haute disponibilité, un développement secondaire est requis.
- Le contenu stocké est relativement volumineux et la valeur maximale stockée dans Memcache est de 1 Mo.
Scénarios de choix de memcache :
KV pur, pour les entreprises disposant de très grandes quantités de données, memcache est plus adapté pour les raisons suivantes :
L'allocation de mémoire de Memcache adopte la méthode de gestion du pool de mémoire pré-alloué, ce qui peut économiser le temps d'allocation de mémoire Redis est un espace d'application temporaire, ce qui peut conduire à une fragmentation.
En utilisant la mémoire virtuelle, memcache stocke toutes les données dans la mémoire physique. Redis possède son propre mécanisme vm, qui peut théoriquement stocker plus de données que la mémoire physique. Lorsque les données sont dépassées, l'échange est effectué. déclenché pour actualiser les données froides sur le disque. À partir de ce point, lorsque la quantité de données est importante, memcache est plus rapide
modèle de réseau, memcache utilise un modèle de réutilisation non bloquant 10, redis utilise également un I non bloquant. Modèle de réutilisation, mais redis fournit également des fonctions de tri, d'agrégation et des calculs CPU complexes autres que le stockage KV, ce qui bloquera toute la planification I0. De ce point de vue, puisque redis fournit plus de fonctions, memcache est plus rapide
- Modèle de thread, memcache utilise le multi-threading, le thread principal écoute et le sous-thread de travail accepte les demandes et effectue la lecture et l'écriture. Il peut y avoir des conflits de verrouillage dans ce processus. Bien que le thread unique utilisé par Redis n'ait pas de conflits de verrouillage, il est difficile d'utiliser les caractéristiques du multicœur pour améliorer le débit.
8. Que dois-je faire si le cache est incohérent avec la base de données ?
Supposons que la mémoire principale est séparée et que la base de données séparée en lecture-écriture est utilisée
Si un thread A supprime d'abord les données mises en cache, puis écrit les données dans la bibliothèque principale, à ce stade. À ce moment-là, la synchronisation de la bibliothèque principale et de la bibliothèque esclave n'est pas terminée. Le thread B ne parvient pas à lire les données du cache. Il lit les anciennes données de la bibliothèque esclave, puis les met à jour dans le cache. données.
La raison de l'incohérence ci-dessus est que les données de la base de données maître-esclave sont incohérentes. Une fois le cache ajouté, le temps d'incohérence maître-esclave est allongé.
Idée de traitement : une fois les données mises à jour à partir de la base de données esclave, les données dans le cache seront également mises à jour en même temps. Autrement dit, lorsque les données sont mises à jour à partir de la base de données esclave, supprimez-les de la. mettre en cache et éliminer les anciennes données écrites pendant cette période.
9. Comment résoudre l'incohérence entre les bases de données maître et esclave ?
Description du scénario : Pour la bibliothèque maître-esclave, la lecture et l'écriture sont séparées. S'il y a un décalage horaire dans la synchronisation de la mise à jour de la bibliothèque maître-esclave, cela entraînera une incohérence dans la bibliothèque maître-esclave. données de la bibliothèque
- Ignorez cette incohérence des données. Dans les entreprises ayant de faibles exigences en matière de cohérence des données, la cohérence en temps réel peut ne pas être requise
- Forcer la lecture à partir de la base de données principale et utilisez une base de données principale hautement disponible pour la lecture et l'écriture de la base de données. Le tout dans la bibliothèque principale, ajoutez un cache pour améliorer les performances de lecture des données.
- Lire sélectivement la bibliothèque principale, ajouter un cache pour enregistrer les données qui doivent être lues dans la bibliothèque principale, utiliser quelle bibliothèque, quelle table et quelle clé primaire comme clé de cache, et définir l'invalidation du cache L'heure est l'heure de synchronisation entre les bibliothèques maître et esclave. S'il y a ces données dans le cache, lisez directement la bibliothèque maître. S'il n'y a pas de clé primaire dans le cache, lisez-la dans la bibliothèque esclave correspondante. .
10. Problèmes de performances courants et solutions de Redis
- Il est préférable de ne pas faire de travail de persistance, tel que RDB. instantané de la mémoire et fichier journal AOF
- Si les données sont importantes, un esclave active la sauvegarde AOF et la politique est définie pour se synchroniser une fois par seconde
- Pour la rapidité de réplication maître-esclave et la stabilité de la connexion, il est préférable que le maître et l'esclave soient dans un réseau local
- Essayez d'éviter d'ajouter des bibliothèques esclaves à la bibliothèque maître stressée
- N'utilisez pas de structure maillée pour la réplication maître-esclave, essayez d'utiliser une structure linéaire, Maître<–Esclave1<—Esclave2…
11. Élimination des données Redis Quelles sont les stratégies ?
voltile-lru sélectionne les données les moins récemment utilisées dans l'ensemble de données qui a défini le délai d'expiration et les élimine.
voltile-ttl sélectionne les données à utiliser dans l'ensemble de bases de données dont le délai d'expiration est défini.
voltile-random sélectionne et élimine les données de l'ensemble de données dont le délai d'expiration est défini.
allkeys-lru sélectionne les données les moins récemment utilisées de l'ensemble de données et les élimine
allkeys -random sélectionne aléatoirement les données à éliminer de l'ensemble de données
pas d'expulsion interdit l'expulsion des données
12. Quelles sont les structures de données présentes dans Redis
String String, dictionnaire Hash, liste, ensemble, ensemble ordonné SortedSet. Si vous êtes un utilisateur de premier niveau, il y en aura plus. Si vous êtes un utilisateur Redis intermédiaire ou avancé, vous devrez également ajouter les structures de données suivantes HyperLogLog, Geo et Pub/Sub.
13. S'il y a 100 millions de clés dans Redis et que 100 000 d'entre elles commencent par un préfixe fixe et connu, et si vous les trouviez toutes ?
Utilisez la commande keys pour parcourir la liste des clés du modèle spécifié.
L'autre partie a ensuite demandé : si ce redis fournit des services aux entreprises en ligne, quels sont les problèmes liés à l'utilisation de la commande key ?
À ce stade, vous devez répondre à une fonctionnalité clé de Redis : le monothreading de Redis. L'instruction key entraînera le blocage du thread pendant un certain temps et le service en ligne sera mis en pause. Le service ne pourra pas être restauré tant que l'instruction n'est pas exécutée. À ce stade, vous pouvez utiliser la commande scan. La commande scan peut extraire la liste des clés du mode spécifié sans blocage, mais il y aura une certaine probabilité de duplication. Il suffit de le faire une fois sur le client, mais le temps global passé sera le même. être plus long que de l'utiliser directement. La commande key est longue.
14. Avez-vous déjà utilisé Redis pour créer une file d'attente asynchrone ? Comment est-il implémenté
Utilisez le type de liste pour enregistrer les informations de données, rpush produit des messages et lpop consomme des messages ? . Lorsque lpop n'a pas de messages, vous pouvez dormir pendant un certain temps, puis vérifier s'il y a des informations. Si vous ne voulez pas dormir, vous pouvez utiliser blpop lorsqu'il n'y a pas d'informations, il se bloquera jusqu'à ce que les informations soient disponibles. arrive. Redis peut implémenter un producteur et plusieurs consommateurs via le modèle d'abonnement au sujet pub/sub. Bien sûr, il existe certains inconvénients lorsque le consommateur se déconnecte, les messages produits seront perdus.
15. Comment Redis implémente la file d'attente retardée
Utilisez sortedset, utilisez l'horodatage comme score, le contenu du message comme clé, appelez zadd pour produire des messages et les consommateurs utilisent zrangbyscore. données il y a n secondes pour le traitement de l'interrogation.
16. Qu'est-ce que Redis ? Décrivez brièvement ses avantages et ses inconvénients ?
Redis est essentiellement une base de données en mémoire de type clé-valeur, un peu comme Memcached. L'intégralité de la base de données est chargée dans la mémoire pour le fonctionnement, et les données de la base de données sont vidées sur le disque dur pour être stockées. opérations asynchrones sur une base régulière.
Parce qu'il s'agit d'une opération de mémoire pure, Redis a d'excellentes performances et peut gérer plus de 100 000 opérations de lecture et d'écriture par seconde. Il s'agit de la base de données clé-valeur la plus rapide connue.
L'excellence de Redis ne réside pas seulement dans ses performances. Le plus grand charme de Redis est qu'il prend en charge la sauvegarde d'une variété de structures de données
De plus, la limite maximale d'une seule valeur est de 1 Go, contrairement à Memcached. , qui ne peut enregistrer que 1 Mo de données. Par conséquent, Redis peut être utilisé pour implémenter de nombreuses fonctions utiles.
Par exemple, utilisez sa List pour créer une liste FIFO doublement chaînée afin d'implémenter un service de file d'attente de messages léger et hautes performances, et utilisez son Set pour créer un système de balises hautes performances, etc.
De plus, Redis peut également définir le délai d'expiration de la valeur-clé stockée, elle peut donc également être utilisée comme une version améliorée de memcached. Le principal inconvénient de Redis est que la capacité de la base de données est limitée par la mémoire physique et ne peut pas être utilisée pour une lecture et une écriture hautes performances de données volumineuses. Par conséquent, les scénarios adaptés à Redis se limitent principalement aux opérations hautes performances et aux calculs de petites quantités. de données.
17. Quels sont les avantages de Redis par rapport à Memcached ?
Toutes les valeurs dans memcached sont des chaînes simples, et redis, en remplacement, prend en charge des types de données plus riches
Redis est beaucoup plus rapide que Memcached
redis peut conserver ses données
18. Quels types de données Redis prend-il en charge ?
String, List, Set, SortedSet, hashes
19 Quelles ressources physiques Redis consomme-t-il principalement ?
Mémoire.
20. Quel est le nom complet de Redis ?
Serveur de dictionnaire à distance
21. Quelles stratégies d'élimination des données Redis propose-t-il ?
noeviction : renvoie une erreur lorsque la limite de mémoire est atteinte et que le client tente d'exécuter une commande qui entraînerait l'utilisation de plus de mémoire (la plupart des commandes d'écriture, mais DEL et quelques exceptions)
allkeys-lru : essayez de recycler les clés les moins utilisées (LRU) afin qu'il y ait de l'espace pour les données nouvellement ajoutées.
volatile-lru : essayez de recycler les clés les moins utilisées (LRU), mais uniquement les clés de l'ensemble expiré, afin qu'il y ait de la place pour les données nouvellement ajoutées.
allkeys-random : recyclez les clés aléatoires pour libérer de l'espace pour les données nouvellement ajoutées.
volatile-random : recyclez les clés aléatoires pour libérer de l'espace pour les données nouvellement ajoutées, mais uniquement pour les clés de l'ensemble expiré.
volatile-ttl : recyclez les clés de l'ensemble expiré et donnez la priorité aux clés avec des temps de survie (TTL) plus courts, afin que les données nouvellement ajoutées aient de l'espace à stocker.
22. Pourquoi Redis ne fournit-il pas officiellement une version Windows ?
Étant donné que la version actuelle de Linux est assez stable et compte un grand nombre d'utilisateurs, il n'est pas nécessaire de développer une version Windows, ce qui entraînerait des problèmes de compatibilité et autres.
23. Quelle est la capacité maximale qu'une valeur de type chaîne peut stocker ?
512M
24. Pourquoi Redis doit-il mettre toutes les données en mémoire ?
Afin d'obtenir la vitesse de lecture et d'écriture la plus rapide, Redis lit toutes les données dans la mémoire et écrit les données sur le disque de manière asynchrone.
Redis a donc les caractéristiques d'une vitesse rapide et d'une persistance des données. Si les données ne sont pas placées en mémoire, la vitesse des E/S du disque affectera sérieusement les performances de Redis.
Alors que la mémoire devient de moins en moins chère aujourd'hui, Redis deviendra de plus en plus populaire. Si la mémoire maximale utilisée est définie, de nouvelles valeurs ne peuvent pas être insérées une fois que le nombre d'enregistrements de données existants atteint la limite de mémoire.
25. Comment mettre en œuvre la solution cluster Redis ? Quels sont les projets ?
codis.
La solution de cluster la plus couramment utilisée à l'heure actuelle a fondamentalement le même effet que twemproxy, mais elle prend en charge la récupération des anciennes données de nœuds vers de nouveaux nœuds de hachage lorsque le nombre de nœuds change.
Le cluster fourni avec rediscluster3.0 se caractérise par le fait que son algorithme distribué n'est pas un hachage cohérent, mais le concept d'emplacements de hachage, et il prend en charge la définition de nœuds esclaves. Consultez la documentation officielle pour plus de détails.
Implémenté au niveau de la couche de code métier, créez plusieurs instances Redis non liées au niveau de la couche de code, effectuez un calcul de hachage sur la clé, puis exploitez les données sur l'instance Redis correspondante. Cette méthode a des exigences relativement élevées pour le code de la couche de hachage. Les considérations incluent des solutions algorithmiques alternatives après une panne de nœud, la récupération automatique des scripts après un choc de données, la surveillance des instances, etc.
26. Dans quelles circonstances la solution de cluster Redis entraînera-t-elle l'indisponibilité de l'ensemble du cluster ?
Dans un cluster avec trois nœuds A, B et C, sans modèle de réplication, si le nœud B échoue, l'ensemble du cluster pensera qu'il y a un manque d'emplacements dans la plage 5501- 11 000. Non disponible.
27. Il y a 20 millions de données dans MySQL, mais seulement 200 000 données sont stockées dans redis. Comment s'assurer que les données dans redis sont des données chaudes ?
Lorsque la taille de l'ensemble de données de la mémoire Redis augmente jusqu'à une certaine taille, la stratégie d'élimination des données sera mise en œuvre.
28. Quels sont les scénarios appropriés pour Redis ?
-
Cache de session
L'un des scénarios les plus couramment utilisés pour utiliser Redis est le cache de session. L'avantage d'utiliser Redis pour mettre en cache les sessions par rapport à d'autres stockages (tels que Memcached) est que Redis assure la persistance. Lors de la maintenance d'un cache qui n'exige pas strictement de cohérence, la plupart des gens seraient mécontents si toutes les informations du panier d'achat de l'utilisateur étaient perdues. Le seraient-ils toujours ?
Heureusement, à mesure que Redis s'est amélioré au fil des années, il est facile de découvrir comment utiliser correctement Redis pour mettre en cache les documents de session. Même la célèbre plateforme commerciale Magento propose des plug-ins Redis.
- Cache pleine page (FPC)
En plus des jetons de session de base, Redis fournit également une plate-forme FPC très simple. Revenons au problème de cohérence, même si l'instance Redis est redémarrée, les utilisateurs ne verront pas de baisse de la vitesse de chargement des pages en raison de la persistance du disque. Il s'agit d'une grande amélioration, similaire au FPC local PHP. En prenant à nouveau Magento comme exemple, Magento fournit un plugin pour utiliser Redis comme backend de cache pleine page.
De plus, pour les utilisateurs de WordPress, Pantheon dispose d'un très bon plug-in wp-redis, qui pourra vous aider à charger le plus rapidement possible les pages que vous avez parcourues.
- File d'attente
L'un des grands avantages de Reids dans le domaine des moteurs de stockage de mémoire est qu'il fournit des opérations de liste et d'ensemble, ce qui permet à Redis d'être utilisé comme une bonne plate-forme de file d'attente de messages. Les opérations utilisées par Redis comme file d'attente sont similaires aux opérations push/pop des langages de programmation locaux (tels que Python) sur les listes. Si vous recherchez rapidement « Redisqueues » dans Google, vous trouverez immédiatement un grand nombre de projets open source. Le but de ces projets est d'utiliser Redis pour créer de très bons outils back-end pour répondre à divers besoins de files d'attente. Par exemple, Celery a un backend qui utilise Redis comme courtier. Vous pouvez le visualiser à partir d'ici.
Classement/Compteur
Redis fait un très bon travail en incrémentant ou en décrémentant les nombres en mémoire. Les ensembles (Sets) et les ensembles ordonnés (SortedSet) nous permettent également d'effectuer très simplement ces opérations. Redis fournit simplement ces deux structures de données. Nous voulons donc obtenir les 10 meilleurs utilisateurs de l'ensemble trié - appelons-les "user_scores", nous devons simplement le faire comme ceci :
Bien sûr, cela suppose que vous sont triés par ordre croissant en fonction des scores de vos utilisateurs. Si vous souhaitez renvoyer l'utilisateur et son score, vous devez l'exécuter comme ceci :
ZRANGEuser_scores010WITHSCORES
AgoraGames est un bon exemple, implémenté dans Ruby, et ses classements utilisent Redis pour stocker les données. Vous pouvez le voir ici. .
- Publier/Abonnez-vous
Le dernier (mais certainement pas le moindre) est la fonctionnalité de publication/abonnement de Redis. Il existe en effet de nombreux cas d’usage pour la publication/abonnement. J'ai vu des gens l'utiliser dans les connexions de réseaux sociaux, comme déclencheur de scripts basés sur la publication/abonnement, et même pour créer des systèmes de discussion en utilisant la fonctionnalité de publication/abonnement de Redis !
29. Quels sont les clients Java pris en charge par Redis ? Lequel est officiellement recommandé ?
Redisson, Jedis, laitue, etc. Le Redisson est officiellement recommandé.
30. Quelle est la relation entre Redis et Redisson ?
Redisson est un client Redis de coordination distribuée avancé qui peut aider les utilisateurs à implémenter facilement certains objets Java (Bloomfilter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue , Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish/Subscribe, HyperLogLog).
31. Quels sont les avantages et les inconvénients des Jedis et Redisson ?
Jedis est le client Java de Redis, et son API fournit un support relativement complet pour les commandes Redis ;
Redisson implémente une structure de données Java distribuée et évolutive, similaire à Jedis. Par rapport à Redis, la fonction est relativement simple et ne prend pas en charge les opérations de chaîne, le tri, les transactions, les pipelines, les partitions et autres fonctionnalités Redis. L'objectif de Redisson est de promouvoir la séparation des préoccupations des utilisateurs de Redis, afin que les utilisateurs puissent se concentrer davantage sur le traitement de la logique métier.
32. Comment définir et vérifier le mot de passe pour Redis ?
Définir le mot de passe : le jeu de configuration nécessite le pass 123456 Mot de passe d'autorisation : auth123456
33. Parlez-nous du concept du slot de hachage Redis ?
Le cluster Redis n'utilise pas de hachage cohérent, mais introduit le concept d'emplacement de hachage. Le cluster Redis dispose de 16 384 emplacements de hachage. Chaque clé est déterminée en prenant modulo 16 384 après vérification CRC16. Le nœud du cluster est responsable d’une partie de l’emplacement de hachage.
34. Quel est le modèle de réplication maître-esclave du cluster Redis ?
Afin de rendre le cluster toujours disponible lorsque certains nœuds échouent ou que la plupart des nœuds ne peuvent pas communiquer, le cluster utilise un modèle de réplication maître-esclave et chaque nœud aura N-1 répliques.
35. Les opérations d'écriture seront-elles perdues dans le cluster Redis ? Pourquoi?
Redis ne garantit pas une forte cohérence des données, ce qui signifie qu'en pratique, le cluster peut perdre des opérations d'écriture sous certaines conditions.
36. Comment les clusters Redis sont-ils répliqués ?
Réplication asynchrone
37. Quel est le nombre maximum de nœuds dans un cluster Redis ?
16384.
38. Comment choisir une base de données pour le cluster Redis ?
Le cluster Redis ne peut actuellement pas sélectionner la base de données et est par défaut la base de données 0.
39. Comment tester la connectivité de Redis ?
ping
40. À quoi servent les pipelines dans Redis ?
Un serveur de requêtes/réponses peut gérer de nouvelles requêtes même si les anciennes requêtes n'ont pas encore reçu de réponse. Cela permet d'envoyer plusieurs commandes au serveur sans attendre de réponse, et enfin de lire cette réponse en une seule étape.
Il s’agit du pipelining, une technique largement utilisée depuis des décennies. Par exemple, de nombreux protocoles POP3 ont implémenté la prise en charge de cette fonction, ce qui accélère considérablement le processus de téléchargement de nouveaux e-mails depuis le serveur.
41. Comment comprendre les transactions Redis ?
Une transaction est une opération unique et isolée : toutes les commandes de la transaction sont sérialisées et exécutées dans l'ordre. Lors de l'exécution de la transaction, celle-ci ne sera pas interrompue par les demandes de commandes envoyées par d'autres clients. Une transaction est une opération atomique : soit toutes les commandes de la transaction sont exécutées, soit aucune d'entre elles n'est exécutée.
42. Quelles sont les commandes liées aux transactions Redis ?
MULTI, EXEC, DISCARD, WATCH
43. Comment régler le délai d'expiration et la validité permanente de Rediskey ?
Commandes EXPIRE et PERSIST.
44. Comment Redis optimise-t-il la mémoire ?
Utilisez autant que possible les tables de hachage (hachages). Les tables de hachage (ce qui signifie que le nombre stocké dans la table de hachage est petit) utilisent très peu de mémoire, vous devez donc abstraire autant que possible votre modèle de données. possible à l'intérieur d'une table de hachage. Par exemple, si vous avez un objet utilisateur dans votre système Web, ne définissez pas de clé distincte pour le nom, le prénom, l'adresse e-mail et le mot de passe de l'utilisateur. Stockez plutôt toutes les informations de l'utilisateur dans une table de hachage.
45. Comment fonctionne le processus de recyclage Redis ?
Un client a exécuté une nouvelle commande et ajouté de nouvelles données.
Redi vérifie l'utilisation de la mémoire si elle est supérieure à la limite maxmemory, elle sera recyclée selon la stratégie définie. Une nouvelle commande est exécutée, etc.
Nous franchissons donc constamment la limite de la mémoire en atteignant constamment la limite, puis en recyclant constamment en dessous de la limite.
Si le résultat d'une commande entraîne l'utilisation d'une grande quantité de mémoire (comme par exemple l'enregistrement de l'intersection d'un grand ensemble sur une nouvelle clé), il ne faudra pas longtemps pour que la limite de mémoire soit dépassée par cette utilisation de la mémoire.
Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !
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!