40 questions d'entretien sur l'exploitation et la maintenance de Redis

Afin d'être une bonne aide pour tout le monde sur le chemin de l'entretien, pour les étudiants qui n'ont aucune idée de Redis, nous avons compilé 40 questions d'entretien Redis courantes, afin que vous ne paniquez pas pendant l'entretien et que vous vous efforciez d'obtenir mains douces !

1. Qu'est-ce que Redis ?

Redis est entièrement open source et gratuit, conforme au protocole BSD et est une base de données clé-valeur hautes performances.

Par rapport aux autres produits de cache clé-valeur, Redis présente les trois caractéristiques suivantes :

  • Redis prend en charge la persistance des données, qui peut enregistrer les données en mémoire sur le disque, et peut être rechargée pour être utilisée lors du redémarrage.

  • Redis prend non seulement en charge les données de type clé-valeur simples, mais fournit également le stockage de structures de données telles que liste, ensemble, zset et hachage.

  • Redis prend en charge la sauvegarde des données, c'est-à-dire la sauvegarde des données en mode maître-esclave.

Avantages de Redis :

  • Performances extrêmement élevées : Redis peut lire à une vitesse de 110 000 fois/s et écrire à une vitesse de 81 000 fois/s.

  • Types de données riches : Redis prend en charge les types de données Chaînes, Listes, Hachages, Ensembles et Ensembles ordonnés dans les cas binaires.

  • Atomique : Toutes les opérations de Redis sont atomiques, ce qui signifie qu'elles sont soit exécutées avec succès, soit non exécutées du tout si elles échouent. Les opérations individuelles sont atomiques. Les opérations multiples prennent également en charge les transactions, c'est-à-dire l'atomicité, enveloppées par les instructions MULTI et EXEC.

  • Fonctionnalités riches : Redis prend également en charge la publication/l'abonnement, la notification, l'expiration de la clé et d'autres fonctionnalités.

En quoi Redis est-il différent des autres magasins de clé-valeur ?

Redis a des structures de données plus complexes et fournit des opérations atomiques sur celles-ci, ce qui est une voie évolutive différente des autres bases de données. Les types de données de Redis sont basés sur des structures de données de base et sont transparents pour les programmeurs sans abstraction supplémentaire.

Redis s'exécute en mémoire mais peut être conservé sur le disque. La mémoire doit donc être pesée lors de la lecture et de l'écriture de différents ensembles de données à grande vitesse, car la quantité de données ne peut pas être supérieure à la mémoire matérielle. Un autre avantage des bases de données en mémoire est qu'il est très simple de fonctionner en mémoire par rapport aux mêmes structures de données complexes sur disque, de sorte que Redis peut faire beaucoup de choses avec une complexité interne élevée. En même temps, ils sont compacts en termes de format sur disque car ils ne nécessitent pas d'accès aléatoire.

2. Quel est le type de données de Redis ?

Redis prend en charge cinq types de données : chaîne (chaîne), hachage (hachage), liste (liste), ensemble (ensemble) et ensemble zsetsorted (ensemble ordonné).

Dans nos projets actuels, la chaîne et le hachage sont couramment utilisés. Si vous êtes un utilisateur avancé de Redis, vous devez également ajouter les structures de données suivantes HyperLogLog, Geo, Pub/Sub.

Si vous dites que vous avez joué au module Redis, comme BloomFilter, RedisSearch, Redis-ML, les yeux de l'intervieweur commenceront à briller.

3. Quels sont les avantages d'utiliser Redis ?

  • La vitesse est rapide, car les données sont stockées en mémoire, similaire à HashMap, l'avantage de HashMap est que la complexité temporelle de la recherche et de l'opération est O1)

  • Prend en charge les types de données riches, prend en charge la chaîne, la liste, l'ensemble, le Zset, le hachage, etc.

  • Les transactions sont prises en charge et les opérations sont atomiques. La soi-disant atomicité signifie que toutes les modifications apportées aux données sont soit exécutées, soit non exécutées du tout.

  • Des fonctionnalités riches, peuvent être utilisées pour la mise en cache, les messages, définir le délai d'expiration par clé, il sera supprimé automatiquement après l'expiration

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

  • Toutes les valeurs Memcached sont de simples chaînes, et Redis, en remplacement, prend en charge des classes de données plus riches

  • Redis est beaucoup plus rapide que Memcached

  • Redis peut conserver ses données

5. Quelles sont les différences entre Memcache et Redis ?

  • Méthode de stockage Memecache stocke toutes les données dans la mémoire, et il raccroche après une panne de courant, et les données ne peuvent pas dépasser la taille de la mémoire. Une partie de Redis est stockée sur le disque dur, ce qui assure la persistance des données.

  • Types de prise en charge des données Memcache prend en charge des types de données relativement simples. Redis a des types de données complexes.

  • Différents modèles sous-jacents sont utilisés, et les méthodes de mise en œuvre sous-jacentes et les protocoles d'application pour communiquer avec les clients sont différents. Redis construit directement le mécanisme de VM par lui-même, car si le système général appelle des fonctions système, il perdra un certain temps à se déplacer et à demander.

6. Redis est-il à processus unique et à thread unique ?

Redis est à processus unique et à thread unique. Redis utilise la technologie de file d'attente pour transformer l'accès simultané en accès série, éliminant ainsi la surcharge du contrôle série traditionnel de la base de données.

7. Quelle est la capacité maximale d'un stockage intelligent de type chaîne ?

512M。

8. Quel est le mécanisme de persistance de Redis ? Avantages et inconvénients de chacun ?

Redis fournit deux mécanismes de persistance RDB et AOF :

Méthode de persistance RDB (Redis DataBase) : fait référence au mode semi-persistant d'enregistrement de toutes les paires clé-valeur de la base de données Redis sous la forme d'un instantané de l'ensemble de données, et écrit les données dans un fichier temporaire à un certain moment. Une fois la persistance terminée, utilisez ceci Le fichier temporaire remplace le dernier fichier persistant pour réaliser la récupération des données.

avantage:

  • Il n'y a qu'un seul fichier dump.rdb, ce qui est pratique pour la persistance.

  • Bonne tolérance aux catastrophes, un fichier peut être enregistré sur un disque sûr.

  • Pour optimiser les performances, bifurquez le processus enfant pour terminer l'opération d'écriture et laissez le processus principal continuer à traiter les commandes, afin que l'IO soit maximisé. Utilisez un processus enfant distinct pour la persistance, et le processus principal n'effectuera aucune opération d'E/S, garantissant ainsi les hautes performances de Redis.

  • Lorsque l'ensemble de données est volumineux, il est plus efficace qu'AOF.

Inconvénients : faible sécurité des données. RDB est conservé à intervalles réguliers. Si Redis échoue pendant la persistance, une perte de données se produira. Cette méthode est donc plus adaptée lorsque les exigences en matière de données ne sont pas rigoureuses

Mode de persistance AOF (Append-only file) : cela signifie que tous les enregistrements de ligne de commande sont entièrement stockés de manière persistante et enregistrés en tant que fichiers aof au format du protocole de demande de commande Redis.

avantage:

  • La sécurité des données, la persistance aof peut être configurée avec l'attribut appendfsync, il y en a toujours, chaque opération de commande est enregistrée une fois dans le fichier aof.

  • Écrivez des fichiers via le mode ajout, même si le serveur est en panne au milieu, vous pouvez utiliser l'outil redis-check-aof pour résoudre le problème de cohérence des données.

  • Le mode de réécriture du mécanisme AOF. Avant que le fichier AOF ne soit réécrit (les commandes seront fusionnées et réécrites lorsque le fichier est trop volumineux), certaines commandes peuvent être supprimées (comme le flushall mal utilisé)

défaut:

  • Les fichiers AOF sont plus volumineux que les fichiers RDB et sont plus lents à restaurer.

  • Lorsque l'ensemble de données est volumineux, il est moins efficace que le démarrage RDB.

9. Problèmes et solutions de performances courants de Redis

  • Il est préférable que le maître n'écrive pas d'instantané de mémoire. Si le maître écrit un instantané de mémoire, la commande save programmera la fonction rdbSave, qui bloquera le travail du thread principal. Lorsque l'instantané est relativement volumineux, il aura un grand impact sur les performances, et le service sera suspendu par intermittence.

  • Si les données sont plus importantes, un esclave active les données de sauvegarde AOF et la politique est configurée pour en synchroniser une par seconde.

  • Pour la rapidité de la 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 le même réseau local.

  • Essayez d'éviter d'ajouter des esclaves à la bibliothèque maître sous haute pression.

  • N'utilisez pas une structure de graphe pour la réplication maître-esclave. Il est plus stable d'utiliser une structure de liste chaînée à sens unique, à savoir : Maître <- Esclave1<- Esclave2 <- Esclave3... Cette structure est pratique pour résoudre le point unique. de problème de panne et réalisez le remplacement de l'esclave par le maître. Si le maître raccroche, vous pouvez immédiatement activer Slave1 pour être le maître, et les autres restent inchangés.

10. Stratégie de suppression de clé expirée Redis ?

  • Suppression temporisée : créez un temporisateur tout en définissant l'heure d'expiration de la clé. Laissez la minuterie supprimer la clé immédiatement lorsque l'heure d'expiration de la clé arrive.

  • Suppression paresseuse : laissez la clé expirer malgré tout, mais chaque fois que vous obtenez une clé de l'espace clé, vérifiez si la clé obtenue est expirée, si elle est expirée, supprimez la clé ; si elle n'est pas expirée, renvoyez la clé.

  • Suppression périodique : Le programme vérifie la base de données de temps en temps et supprime les clés expirées qu'elle contient. Le nombre de clés expirées à supprimer et le nombre de bases de données à vérifier dépendent de l'algorithme.

11. Stratégie de recyclage Redis (stratégie d'élimination) ?

  • volatile-lru : sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini pour éliminer

  • volatile-ttl : sélectionnez les données qui expireront dans l'ensemble de données (server.db[i].expires) avec le délai d'expiration défini pour être éliminé

  • volatile-random : sélection aléatoire de l'élimination des données dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini

  • allkeys-lru : sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].dict) à éliminer

  • allkeys-random : sélection aléatoire de l'élimination des données dans l'ensemble de données (server.db[i].dict)

  • no-enviction (eviction) : Désactiver l'éviction des données

Faites attention aux 6 mécanismes ici, volatile et allkeys spécifient s'il faut éliminer les données de l'ensemble de données avec un délai d'expiration défini ou de tous les ensembles de données. Les lru, ttl et random suivants sont trois stratégies d'élimination différentes, plus une politique de non-inviction qui ne se recycle jamais.

Utiliser des règles de stratégie :

  • Si les données présentent une distribution de loi de puissance, c'est-à-dire qu'une certaine fréquence d'accès aux données est élevée et qu'une certaine fréquence d'accès aux données est faible, utilisez allkeys-lru

  • Si les données sont également distribuées, c'est-à-dire que toutes les fréquences d'accès aux données sont les mêmes, utilisez allkeys-random

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

Afin d'atteindre la vitesse de lecture et d'écriture la plus rapide, Redis lit 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 de rapidité et de persistance des données. Si les données ne sont pas conservées en mémoire, la vitesse d'E/S du disque affecte sérieusement les performances de Redis. Aujourd'hui, alors que la mémoire devient de moins en moins chère, 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.

13. Comprenez-vous le mécanisme de synchronisation de Redis ?

Redis peut utiliser la synchronisation maître-esclave et la synchronisation esclave-esclave. Au cours de la première synchronisation, le nœud maître effectue un bgsave et enregistre les opérations de modification ultérieures dans la mémoire tampon en même temps. Après l'achèvement, le fichier rdb est entièrement synchronisé avec le nœud de réplication et le nœud de réplication charge l'image rdb dans la mémoire après l'avoir reçu. Une fois le chargement terminé, demandez au nœud maître de synchroniser les enregistrements d'opération modifiés avec le nœud de copie pour qu'ils soient rejoués afin de terminer le processus de synchronisation.

14. Quels sont les avantages de Pipeline, pourquoi utiliser Pipeline ?

Il est possible de réduire le temps de plusieurs allers-retours d'E/S à un, à condition qu'il n'y ait pas de corrélation causale entre les instructions exécutées par le Pipeline. Lors de l'utilisation de redis-benchmark pour les tests de pression, on peut constater qu'un facteur important affectant la valeur de crête QPS de Redis est le nombre d'instructions de lot Pipeline.

15. Avez-vous déjà utilisé un cluster Redis, quel est le principe du cluster ?

Redis Sentinal se concentre sur la haute disponibilité. Lorsque le maître est en panne, il promeut automatiquement l'esclave au rang de maître et continue à fournir des services.

Le cluster Redis se concentre sur l'évolutivité et utilise le cluster pour le stockage de partition lorsqu'une seule mémoire Redis est insuffisante.

16. Dans quelles circonstances la solution de cluster Redis entraînera-t-elle l'indisponibilité de l'intégralité du cluster ?

Dans un cluster avec trois nœuds A, B et C, s'il n'y a pas de modèle de réplication, si le nœud B tombe en panne, l'ensemble du cluster pensera qu'il manque d'emplacements dans la plage 5501-11000 et qu'il n'est pas disponible.

17. Quels sont les clients Java pris en charge par Redis ? Lequel est officiellement recommandé ?

Redisson, Jedis, laitue, etc. sont officiellement recommandés pour utiliser Redisson.

18. Quels sont les avantages et les inconvénients de Jedis et Redisson ?

Jedis est le client de Redis implémenté en Java, et son API fournit une prise en charge complète des commandes Redis ; Redisson implémente une structure de données Java distribuée et évolutive. Par rapport à Jedis, il a des fonctions plus simples et ne prend pas en charge les opérations de chaîne. Fonctionnalités Redis telles que le tri , les transactions, les pipelines et les partitions ne sont pas pris en charge.

Le but de Redisson est de favoriser la séparation des préoccupations des utilisateurs concernant Redis, afin que les utilisateurs puissent se concentrer davantage sur le traitement de la logique métier.

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

20. Parlez-moi du concept de la fente de hachage Redis ?

Le cluster Redis n'utilise pas de hachage cohérent, mais introduit le concept d'emplacements de hachage. Le cluster Redis a 16384 emplacements de hachage. Une fois que chaque clé passe le contrôle CRC16, il prend le module de 16384 pour déterminer quel emplacement placer. Chaque nœud du cluster Responsable de certains emplacements de hachage.

21. Quel est le modèle de réplication maître-esclave du cluster Redis ?

Afin de rendre le cluster 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.

22. L'opération d'écriture sera-t-elle perdue 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.

23. Comment les clusters Redis sont-ils répliqués ?

Réplication asynchrone.

24. Quel est le nombre maximal de nœuds dans un cluster Redis ?

16384.

25. Comment le cluster Redis choisit-il une base de données ?

Actuellement, le cluster Redis ne peut pas sélectionner la base de données et la valeur par défaut est 0 base de données.

26. Comment tester la connectivité de Redis ?

Utilisez la commande ping.

27. Comment comprendre les transactions Redis ?

Une transaction est une opération unique et isolée : toutes les commandes d'une transaction sont sérialisées et exécutées de manière séquentielle. Pendant l'exécution de la transaction, celle-ci ne sera pas interrompue par des demandes de commande 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.

28. Quelles sont les commandes liées aux transactions Redis ?

MULTI、EXEC、JETER、REGARDER。

29. Comment définir le délai d'expiration et la validité permanente de la clé Redis ?

Commandes EXPIRE et PERSIST.

30. Comment Redis optimise-t-il la mémoire ?

Utilisez autant que possible les tables de hachage (hachages). La mémoire utilisée par les tables de hachage (ce qui signifie que le nombre stocké dans la table de hachage est petit) est très petite, vous devez donc résumer votre modèle de données dans une table de hachage autant que possible. Par exemple, s'il existe un objet utilisateur dans votre système Web, ne définissez pas de clé distincte pour le nom, le prénom, l'e-mail et le mot de passe de l'utilisateur, mais stockez toutes les informations de l'utilisateur dans une table de hachage.

31. Comment fonctionne le processus de recyclage Redis ?

Un client exécute de nouvelles commandes et ajoute de nouvelles données. Redis vérifie l'utilisation de la mémoire, si elle est supérieure à la limite de maxmemory, elle sera recyclée selon la stratégie définie. Une nouvelle commande est exécutée, etc. Nous traversons donc constamment la limite de la limite de mémoire, en atteignant constamment la limite, puis en recyclant continuellement sous la limite. Si le résultat d'une commande entraîne l'utilisation d'une grande quantité de mémoire (par exemple, l'enregistrement de l'intersection de très grandes collections dans 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.

32. Quels sont les moyens de réduire l'utilisation de la mémoire de Redis ?

Si vous utilisez une instance Redis 32 bits, vous pouvez faire bon usage des données de type de collection telles que Hash, liste, ensemble trié, ensemble, etc., car généralement de nombreuses petites valeurs clés peuvent être stockées ensemble dans un plus façon compacte.

33. Que se passe-t-il lorsque Redis manque de mémoire ?

Si la limite supérieure définie est atteinte, la commande d'écriture Redis renverra un message d'erreur (mais la commande de lecture peut toujours revenir normalement.) Ou vous pouvez utiliser Redis comme cache pour utiliser le mécanisme d'élimination de la configuration. Lorsque Redis atteint la limite de mémoire, cela éliminera l'ancien contenu.

34. Combien de clés une instance Redis peut-elle stocker au maximum ? List, Set, Sorted Set, combien d'éléments peuvent-ils stocker au maximum ?

Théoriquement, Redis peut gérer jusqu'à 232 clés, et il a été testé dans la pratique, et chaque instance stocke au moins 250 millions de clés. Nous testons des valeurs plus grandes. Toute liste, ensemble et ensemble trié peut contenir 232 éléments. En d'autres termes, la limite de stockage de Redis est la quantité de mémoire disponible dans le système.

35. Il y a 20 millions de données dans MySQL, mais seulement 20 millions de données dans Redis. Comment s'assurer que les données dans Redis sont toutes des données chaudes ?

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

Connaissances associées : Redis propose 6 stratégies d'élimination des données :

  • volatile-lru : sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini pour éliminer

  • volatile-ttl : sélectionnez les données qui expireront dans l'ensemble de données (server.db[i].expires) avec le délai d'expiration défini pour être éliminé

  • volatile-random : sélection aléatoire de l'élimination des données dans l'ensemble de données (server.db[i].expires) avec un délai d'expiration défini

  • allkeys-lru : sélectionnez les données les moins récemment utilisées dans l'ensemble de données (server.db[i].dict) à éliminer

  • allkeys-random : sélection aléatoire de l'élimination des données dans l'ensemble de données (server.db[i].dict)

  • no-enviction (eviction) : Désactiver l'éviction des données

36. Quel est le scénario le plus approprié pour Redis ?

Cache de session (Cache de session), le scénario le plus couramment utilisé pour utiliser Redis est le cache de session (cache de session). L'avantage d'utiliser Redis pour mettre en cache les sessions par rapport à un autre stockage (tel que Memcached) est que Redis fournit la persistance. Lors de la gestion d'un cache qui n'est pas strictement cohérent, la plupart des gens seraient mécontents si toutes les informations sur le panier d'achat de l'utilisateur étaient perdues. Heureusement, comme Redis s'est amélioré au fil des ans, il est facile de trouver de la documentation sur la façon d'utiliser correctement Redis pour mettre en cache les sessions. Même la plate-forme commerciale bien connue Magento propose un plugin pour Redis.

Le cache de page complète (FPC), en plus du jeton de session de base, Redis fournit également une plate-forme FPC très simple. Revenons à la question de la 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. C'est une grande amélioration, similaire au FPC local de PHP. Prenant à nouveau Magento comme exemple, Magento fournit un plugin pour utiliser Redis comme backend de cache de page complète. De plus, pour les utilisateurs de WordPress, Pantheon dispose d'un très bon plugin wp-redis, qui peut vous aider à charger les pages que vous avez visitées le plus rapidement possible.

Queue, l'un des avantages de Reids dans le domaine du moteur de stockage de mémoire est de fournir des opérations de liste et d'ensemble, ce qui fait que Redis peut être utilisé comme une bonne plate-forme de mise en file d'attente de messages. L'opération que Redis utilise comme file d'attente est similaire à l'opération push/pop d'un langage de programmation local (tel que Python) sur une liste. Si vous effectuez une recherche rapide sur Google pour les "files d'attente Redis", vous trouverez immédiatement une tonne de projets open source qui visent à tirer parti de Redis pour créer de très bons outils backend pour une variété de besoins de mise en file d'attente. Par exemple, Celery a un arrière-plan qui utilise Redis en tant que courtier, vous pouvez le vérifier à partir d'ici.

Classements/Compteurs, Redis fait un excellent travail 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 ces opérations très simplement, et Redis fournit simplement ces deux structures de données. Donc, nous voulons obtenir les 10 meilleurs utilisateurs de l'ensemble trié - appelons-le "user_scores", nous avons juste besoin d'exécuter comme suit : Bien sûr, cela suppose que vous êtes basé sur le score de votre utilisateur Faites un tri croissant. Si vous souhaitez renvoyer l'utilisateur et le score de l'utilisateur, vous devez l'exécuter comme ceci : ZRANGE user_scores 0 10 WITHSCORES Agora Games est un bon exemple, implémenté en Ruby, et son classement utilise Redis pour stocker les données, vous pouvez le trouver ici Voir.

Publier/S'abonner, et le dernier (mais non le moindre) est la fonctionnalité pub/sub de Redis. Il existe en effet de nombreux cas d'utilisation pour publier/s'abonner. J'ai vu des gens l'utiliser dans des connexions de réseaux sociaux, comme déclencheurs pour des scripts basés sur pub/sub, et même utiliser la fonctionnalité pub/sub de Redis pour créer des systèmes de chat !

37. Supposons qu'il y ait 100 millions de clés dans Redis, parmi lesquelles 10w clés commencent par un préfixe fixe et connu, comment toutes les trouver ?

Utilisez la commande keys pour parcourir la liste des clés du mode spécifié.

L'autre partie a alors demandé : si ce Redis fournit des services aux entreprises en ligne, quel sera le problème avec l'utilisation de la commande keys ?

À ce stade, vous devez répondre à une fonctionnalité clé de Redis : le thread unique de Redis. L'instruction keys entraînera le blocage du thread pendant un certain temps et le service en ligne sera suspendu jusqu'à ce que l'instruction soit exécutée avant que le service puisse reprendre. À ce stade, la commande scan peut être utilisée. La commande scan peut extraire la liste des clés du mode spécifié sans blocage, mais il y aura une certaine probabilité de répétition. Il suffit de faire une déduplication côté client, mais la le temps total passé sera plus long que la longueur de commande des touches d'utilisation directe.

38. S'il y a un grand nombre de clés qui doivent être réglées pour expirer en même temps, à quoi faut-il faire attention ?

Si le délai d'expiration d'un grand nombre de clés est défini de manière trop intensive, Redis peut subir un décalage à court terme lorsqu'il expire. Généralement, il est nécessaire d'ajouter une valeur aléatoire au temps pour rendre le temps d'expiration plus dispersé.

39. Avez-vous déjà utilisé Redis comme file d'attente asynchrone ? Comment l'avez-vous utilisé ?

Réponse : Généralement, la structure de la liste est utilisée comme file d'attente, rpush produit des messages et lpop consomme des messages. Lorsqu'il n'y a pas de message de lpop, veuillez dormir un moment et réessayer. Si l'autre partie vous demande si vous pouvez utiliser le sommeil ? list a également une instruction appelée blpop, lorsqu'il n'y a pas de message, elle se bloquera jusqu'à ce que le message arrive. Si l'autre partie demande s'il peut être produit une fois et consommé plusieurs fois ? En utilisant le modèle d'abonné pub/sub topic, une file d'attente de messages 1:N peut être implémentée.

Si l'autre partie demande quels sont les inconvénients du pub/sub ?

Lorsque le consommateur se déconnecte, les messages produits seront perdus et une file d'attente de messages professionnelle telle que RabbitMQ doit être utilisée.

Si l'autre partie demande comment Redis implémente la file d'attente ?

Je suppose que maintenant vous voulez vraiment battre l'intervieweur à mort. Si vous avez une batte de baseball dans la main, comment pouvez-vous poser des questions aussi détaillées. Mais vous êtes très retenu, puis avez répondu calmement : utilisez sortedset, utilisez l'horodatage comme score, le contenu du message comme clé, appelez zadd pour produire des messages et les consommateurs utilisent la commande zrangebyscore pour obtenir l'interrogation des données avant N secondes pour le traitement.

À ce stade, l'intervieweur vous a secrètement donné un coup de pouce. Mais ce qu'il ne sait pas, c'est qu'en ce moment tu mets ton majeur, derrière la chaise.

40. Avez-vous déjà utilisé des verrous distribués Redis ?

Utilisez d'abord setnx pour concourir pour le verrou, puis utilisez expire pour ajouter un délai d'expiration au verrou afin d'éviter que le verrou ne soit oublié pour être libéré.

À ce moment, l'autre partie vous dira que votre réponse est bonne, puis vous demandera ce qui se passe si le processus se bloque de manière inattendue après l'exécution de setnx avant l'expiration ou doit être redémarré pour la maintenance ? À ce stade, vous devez donner des commentaires surprenants : Oh, oui, ce verrou ne sera jamais libéré. Ensuite, vous devez vous gratter la tête, faire semblant de réfléchir pendant un moment, comme si le prochain résultat était de votre propre initiative, puis répondre : je me souviens que la commande set a des paramètres très compliqués, cela devrait pouvoir définir le setnx et expirer en même temps Synthétisez une commande à utiliser !

Je suppose que tu aimes

Origine blog.csdn.net/LinkSLA/article/details/130258397
conseillé
Classement