Maison  >  Article  >  base de données  >  Un résumé de 30 questions fréquemment posées sur Redis !

Un résumé de 30 questions fréquemment posées sur Redis !

藏色散人
藏色散人avant
2021-09-25 16:22:353427parcourir

1.Comment Redis effectue-t-il l'optimisation de la mémoire ?

Utilisez autant que possible les 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 autant que possible résumer votre modèle de données dans 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.

2. Quelles sont les utilisations des pipelines dans Redis ?

Un serveur de requêtes/réponses peut traiter 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 la 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 fonctionnalité, ce qui accélère considérablement le processus de téléchargement de nouveaux e-mails depuis le serveur.

3. 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 (filtre Bloom, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap) dans un environnement distribué, Queue, BlockingQueue , Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publier/Abonnez-vous, HyperLogLog).

4. Quels sont les scénarios appropriés pour Redis ?

(1) 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. Maintenant, le seraient-ils toujours ?

Heureusement, à mesure que Redis s'est amélioré au fil des années, il est facile de comprendre 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.

(2) 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, en raison de la persistance du disque, les utilisateurs ne verront pas de diminution de la vitesse de chargement des pages. Il s'agit d'une grande amélioration, similaire au FPC local PHP.

En prenant encore 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 peut vous aider à charger le plus rapidement possible les pages que vous avez parcourues.

(3) Queue

L'un des grands avantages de Redis 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 de liste dans les langages de programmation locaux (tels que Python).

Si vous recherchez rapidement « Files d'attente Redis » 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.

(4) Ranking/Counter

Redis implémente très bien l'opération d'incrémentation ou de décrémentation des nombres en mémoire. Les ensembles et les ensembles triés 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 procéder comme suit : Bien sûr, cela suppose que vous êtes basé sur les scores de vos utilisateurs. ordre croissant. Si vous souhaitez renvoyer l'utilisateur et son score, vous devez l'exécuter comme ceci :

ZRANGE user_scores 0 10 WITHSCORES

Agora Games est un bon exemple, implémenté dans Ruby, et ses classements utilisent Redis pour stocker vos données. peut le voir ici.

(5) 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éclencheurs 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 !

5. 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 ?

redis Lorsque la taille de l'ensemble de données en mémoire augmente jusqu'à une certaine taille, la stratégie d'élimination des données sera mise en œuvre.

En fait, en plus d'examiner Redis lors des entretiens, de nombreuses entreprises attachent une grande importance aux technologies à haute concurrence et à haute disponibilité, en particulier les sociétés Internet de première ligne telles que la distribution,

JVM, l'analyse du code source Spring, et les microservices sont devenus des questions d’entretien obligatoires.

6. Dans quelles circonstances la solution 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 lui manque des emplacements compris entre 5 501 et 11 000 et deviendra indisponible.

7. Que faire avec la solution cluster Redis ? Quels sont les projets ?

codis

La solution de cluster la plus couramment utilisée à l'heure actuelle, elle 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.

redis cluster

3.0 est livré avec un cluster. Sa caractéristique est que son algorithme distribué n'est pas un hachage cohérent, mais le concept d'emplacements de hachage, et il prend en charge la configuration des nœuds esclaves. Consultez la documentation officielle pour plus de détails. Implémenté au niveau de la couche de code métier, plusieurs instances Redis non liées sont créées au niveau de la couche de code, le calcul de hachage est effectué sur la clé, puis l'instance Redis correspondante est utilisée pour exploiter les données. Cette méthode a des exigences relativement élevées en matière de code de couche de hachage. Les considérations incluent des solutions algorithmiques alternatives après une panne de nœud, la récupération automatique de script après un choc de données, la surveillance d'instance, etc.

8.Quels sont les encodages internes de Redis String ?

int, embstr, raw

Les entiers inférieurs à 10 000 utiliseront la constante int dans le cache.

Longueur inférieure ou égale à 44 octets : encodage embstr

Longueur supérieure à 44 octets : encodage brut

9 Utiliser Redis comme file d'attente de retard, comment l'implémenter spécifiquement ?

Peut être implémenté à l'aide de Zset. Le membre est la description de la tâche, le score est le temps d'exécution, puis utilisez une minuterie pour analyser régulièrement. Une fois qu'il y a une tâche dont le temps d'exécution est inférieur ou égal à l'heure actuelle, elle sera exécutée immédiatement.

10. Comment Redis localise-t-il le nœud spécifique lors de la recherche de clés dans le cluster ?

Utilisez l'algorithme crc16 pour hacher la clé, prenez la valeur de hachage modulo 16384 et obtenez les informations de mappage d'emplacement spécifiques en fonction du nœud et de l'emplacement (après avoir établi une connexion avec le cluster, le client peut obtenir les informations de mappage d'emplacement) pour trouver l'emplacement spécifique. L'adresse du nœud va au nœud spécifique pour trouver la clé. Si la clé n'est pas sur ce nœud, le cluster redis renverra la commande déplacée et ajoutera la nouvelle adresse du nœud au client. , le client actualisera la relation de mappage des emplacements du nœud local. Si l'emplacement Pendant la migration, le cluster redis renverra des instructions au client. Il s'agit d'une correction temporaire. Le client n'actualisera pas la relation de mappage des emplacements du nœud local

11. . Avez-vous compris la persistance de Redis ?

La persistanceRedis a deux méthodes : RDB et AOF.

RDB : enregistrez l'instantané de la base de données sur le disque sous forme binaire.

AOF : enregistrez toutes les commandes et paramètres écrits dans la base de données dans le fichier AOF sous forme de texte de protocole, enregistrant ainsi l'état de la base de données.

12. Dans quelles circonstances Redis déclenchera-t-il le recyclage des clés ?

Deux situations : 1. Nettoyage régulier (échantillonnage) 2. Lors de l'exécution de la commande, déterminez si la mémoire dépasse la mémoire maximale ;

13. Quelles sont les stratégies d'élimination pour la clé Redis ?

8 types : noeviction, volatile-lru, volatile-lfu, volatile-ttl, volatile-random, allkeylru, allkeys-lfu, allkeys-random

14. Avez-vous compris le mécanisme de transaction Redis ?

Le concept de transaction Redis : L'essence de la transaction

Redis est un ensemble de commandes. Les transactions prennent en charge l'exécution de plusieurs commandes à la fois, et toutes les commandes d'une transaction seront sérialisées. Pendant le processus d'exécution de la transaction, les commandes dans la file d'attente seront exécutées en série dans l'ordre et les demandes de commandes soumises par d'autres clients ne seront pas insérées dans la séquence de commandes d'exécution de la transaction.

La transaction Redis est une exécution unique, séquentielle et exclusive d'une série de commandes dans une file d'attente.

Les transactions Redis n'ont aucune notion de niveau d'isolement :

Les opérations par lots sont placées dans le cache de file d'attente avant d'envoyer la commande EXEC et ne seront pas réellement exécutées. Par conséquent, il n'y a pas de requête dans la transaction pour voir les mises à jour dans la transaction, en dehors de la transaction La requête n'est pas visible.

Redis ne garantit pas l'atomicité :

Dans Redis, une seule commande est exécutée de manière atomique, mais les transactions ne garantissent pas l'atomicité et il n'y a pas de restauration. Si une commande de la transaction ne parvient pas à s'exécuter, les commandes restantes seront quand même exécutées.

Trois étapes de la transaction Redis :

Démarrer la transaction

Mise en file d'attente des commandes

Exécuter la transaction

Commandes liées à la transaction Redis :

watch key1 key2 ... : Surveiller une ou plusieurs clés, si avant l'exécution de la transaction, si la clé surveillée est modifiée par d'autres commandes, la transaction sera interrompue (similaire au verrouillage optimiste)

multi : Marquer le début d'un bloc de transaction (en file d'attente)

exec : Exécuter les commandes de tous les blocs de transaction (une fois exec exécuté , avant que les verrous de surveillance ajoutés ne soient annulés)

discard : annulez la transaction et abandonnez toutes les commandes dans le bloc de transaction

unwatch : annulez la surveillance de toutes les clés par la montre

15. Que faut-il faire lors de l'utilisation de Redis pour compter les UV du site internet ?

UV est différent du PV, les UV doivent être dédupliqués. Il existe généralement deux solutions :

1. Utilisez BitMap. Ce qui est stocké est l'uid de l'utilisateur. Lors du calcul de l'UV, effectuez simplement le nombre de bits.

2. Utilisez le filtre Bloom. Mettez l'identifiant utilisateur de chaque visite dans le filtre bloom. L'avantage est que cela économise de la mémoire, mais l'inconvénient est qu'il est impossible d'obtenir des UV précis. Mais c'est un bon choix pour les scènes dans lesquelles vous n'avez pas besoin de connaître avec précision l'UV spécifique, mais seulement d'avoir besoin d'un ordre de grandeur approximatif.

16. Comment gérer les grosses clés dans Redis ?

La grande clé fait référence à une clé avec une valeur particulièrement importante. Par exemple, une très longue chaîne, ou un grand ensemble, etc. Les clés volumineuses entraîneront deux problèmes :

1. L'asymétrie des données, par exemple, l'utilisation de la mémoire de certains nœuds est trop élevée.

2. Lorsqu'une grande clé est supprimée ou qu'une grande clé expire automatiquement, cela entraînera une baisse soudaine du QPS car Redis est monothread.

Solution : Une grande clé peut être fragmentée, par exemple, un grand ensemble peut être divisé en plusieurs petits ensembles.

17. Comment gérer les touches de raccourci dans Redis ?

1. Distribuez les touches de raccourci. Par exemple : ajoutez différents suffixes à la clé, mettez en cache plusieurs clés, afin que chaque clé soit distribuée à différents nœuds.

2. Utilisez la mise en cache à plusieurs niveaux.

18. Cache invalide ? Pénétration du cache ? Avalanche de caches ? Concurrence de cache ?

Invalidation du cache L'invalidation du cache signifie qu'un grand nombre de caches échouent en même temps et que la pression instantanée sur la base de données monte en flèche. La raison de ce phénomène est que le délai d’expiration des clés est fixé à la même valeur. La solution consiste à introduire des facteurs aléatoires dans le délai d'expiration de la clé, tels que 5 minutes + secondes aléatoires.

Pénétration du cache La pénétration du cache fait référence à l'interrogation d'une donnée qui ne se trouve ni dans la base de données ni dans le cache. La base de données sera toujours interrogée et la pression d'accès sur la base de données augmentera. Il existe deux solutions pour la pénétration du cache : le cache. Objet vide : la maintenance du code est plus simple, mais l'effet n'est pas bon. Filtre Bloom : maintenance de code complexe, bon effet.

Avalanche de cache L'avalanche de cache fait référence à l'expiration centralisée des caches dans une certaine période de temps. À l’heure actuelle, d’innombrables requêtes contournent directement le cache et sollicitent directement la base de données. Il y a deux raisons à l'avalanche de cache : le temps d'arrêt de Reid. La plupart des données sont invalides.

Il existe deux solutions pour mettre en cache l'avalanche :

Créer un cluster haute disponibilité pour éviter les temps d'arrêt des redis sur une seule machine.

Définissez différents délais d'expiration pour éviter qu'un grand nombre de clés ne soient invalidées pendant la période de consentement.

Concurrence du cache Parfois, si le site Web a un accès simultané élevé, si un cache échoue, plusieurs processus peuvent interroger la base de données en même temps et configurer le cache en même temps. Si la concurrence est vraiment importante, cela peut également entraîner une concurrence excessive. pression sur la base de données et le cache. Problèmes de mise à jour fréquents. La solution générale consiste à verrouiller lors de la vérification de la base de données. Si la clé n'existe pas, verrouillez-la, puis vérifiez la base de données et placez-la dans le cache, puis déverrouillez-la si d'autres processus détectent qu'il y a un verrou, attendez et ; puis attendez qu'il soit déverrouillé avant de vérifier le cache ou d'entrer dans la base de données.

19. 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.

20. Comment définir un mot de passe et vérifier le mot de passe dans Redis ?

Définir le mot de passe : config set requirepass 123456

Mot de passe d'autorisation : auth 123456

21. Pourquoi Redis doit-il mettre toutes les données en mémoire ?

Redis lit toutes les données en mémoire afin d'atteindre la vitesse de lecture et d'écriture la plus rapide, et écrit les données sur le disque de manière asynchrone.

Donc, Redis a les caractéristiques d'une vitesse rapide et d'une persistance des données. Si les données ne sont pas placées dans la mémoire, la vitesse d'E/S du disque affectera sérieusement les performances de Redis.

À mesure 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.

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 d'autres problèmes.

23. Redis est-il monothread ou multithread ?

Redis6.0 utilise des E/S multithread, mais l'exécution des commandes est toujours monothread.

Avant Redis 6.0, le thread IO et le thread d'exécution étaient tous deux monothread.

24. Pourquoi Redis est-il si rapide ?

1. Fonctionnement de la mémoire ;

2. Fil unique, éliminant la surcharge de commutation de thread et la concurrence de verrouillage ;

3.

25. Quelle est la capacité maximale qu'une valeur de type chaîne peut stocker ?

512M

26. Quel est le nom complet de Redis ?

Serveur de dictionnaire à distance.

27.Quelles ressources physiques Redis consomme-t-il principalement ?

Mémoire.

28.Quelles sont les structures de données de Redis ?

Redis a 5 structures de données de base, qui sont : string (string), list (list), hash (dictionnaire), set (set) et zset (ensemble ordonné).

Ces 5 sont les parties les plus fondamentales et les plus importantes des connaissances liées à Redis.

29.Quels sont les avantages de Redis par rapport à Memcached ?

(1) Toutes les valeurs de memcached sont des chaînes simples En remplacement, redis prend en charge des types de données plus riches

(2) redis est beaucoup plus rapide que memcached

(3) redis peut être durable Transformer ses données

. 30. 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 et exploitée en mémoire, et les données de la base de données sont régulièrement vidées sur le disque dur pour être stockées via des opérations asynchrones.

Comme il s'agit d'une opération de mémoire pure, les performances de Redis sont très bonnes. Il peut gérer plus de 100 000 opérations de lecture et d'écriture par seconde, et il s'agit de la base de données clé-valeur la plus rapide avec des performances connues.

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 de diverses structures de données. De plus, la limite maximale d'une seule valeur est de 1 Go, contrairement à Memcached, qui ne peut sauvegarder que 1 Mo de données. Par conséquent, Redis peut être utilisé pour réaliser 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 massives. Par conséquent, les scénarios adaptés à Redis se limitent principalement à des opérations hautes performances et à des calculs de petites quantités. de données.

Apprentissage recommandé : "Tutoriel vidéo 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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer