Questions d'entretien avec l'ingénieur d'exploitation et de maintenance Linux (4)

Questions d'entretien avec l'ingénieur d'exploitation et de maintenance Linux (4)

Je vous souhaite bonne chance pour trouver l'emploi que vous voulez.
L'apprentissage continu ne sera pas éliminé.
La terre n'explose pas, nous ne prenons pas de vacances.
Les opportunités sont toujours réservées à ceux qui sont préparés.
Allez, frappez les ouvriers !

1 Types de données couramment utilisés dans redis

  • String : String, le type de données le plus basique
  • Liste : liste
  • Hachage : objet de hachage
  • Ensemble : ensemble
  • Ensemble trié : une collection ordonnée, une partition est ajoutée à l'ensemble

2 Il existe plusieurs types de persistance des données Redis, quelles sont les différences et comment choisir

À la fois rdb et aof

Aof est similaire au journal binaire de mysql, il enregistre toutes les opérations dans le journal. Et rdb est la vraie donnée stockée, ce qui équivaut à prendre un instantané de toutes les données de redis dans la mémoire sur le disque.

S'il est principalement utilisé comme fonction de cache ou peut supporter la perte de données pendant quelques minutes, l'environnement de production n'a généralement besoin que d'activer RDB, qui est également la valeur par défaut ; si les données doivent être stockées de manière persistante et ne peuvent pas être perdu du tout, vous pouvez choisir d'activer RDB et AOF en même temps. Il n'est généralement pas recommandé d'activer uniquement AOF.

3 Quels sont les modes architecturaux de redis

  • réplication maître-esclave
  • Sentinelle
  • Grappe Redis

4 Qu'est-ce que l'avalanche de cache ? Comment résoudre?

Définition : si le délai d'expiration défini par les données mises en cache est le même, le cache sera invalidé en même temps dans un certain laps de temps, et toutes les requêtes iront à la base de données, ce qui entraînera l'arrêt de la base de données.

Solution:

Ajoutez une valeur aléatoire au délai d'expiration lors de la mise en cache, ce qui réduira considérablement l'expiration du cache en même temps.

5 Qu'est-ce que la pénétration du cache ? Comment résoudre?

Définition : la pénétration du cache fait référence à l'interrogation de données qui ne doivent pas exister. En raison d'un manque de cache et pour des raisons de tolérance aux pannes, si les données ne peuvent pas être trouvées dans la base de données, elles ne seront pas écrites dans le cache. Cela entraînera l'interrogation des données inexistantes dans la base de données à chaque fois qu'elles seront demandées, qui perd le sens de la mise en cache. Un grand nombre de données manquent dans le cache, ce qui entraîne l'envoi de requêtes à la base de données.

Solution:

Comme les paramètres demandés sont illégaux (des paramètres qui n'existent pas sont demandés à chaque fois), on peut utiliser un filtre Bloom (BloomFilter) ou un filtre de compression pour intercepter à l'avance. S'il est illégal, la requête ne sera pas envoyée à la base de données couche!

Lorsque nous ne pouvons pas le trouver dans la base de données, nous définissons également cet objet vide dans le cache. La prochaine fois que vous le demanderez, vous pourrez l'obtenir à partir du cache.

Dans ce cas, un objet vide est généralement défini avec un délai d'expiration plus court.

6 Qu'est-ce que la panne du cache ? Comment résoudre?

Définition : une certaine clé de point d'accès est constamment à haute simultanéité. Lorsque la clé de point d'accès devient invalide, l'accès continu à haute simultanéité cassera le cache et accédera directement à la base de données, provoquant l'arrêt de la base de données.

Solution:

Définissez les données du point d'accès sur "ne jamais expirer" plus un mutex. Le phénomène ci-dessus est que plusieurs threads interrogent les données de la base de données en même temps, nous pouvons alors utiliser un mutex pour le verrouiller lors de la première demande de données de requête, et d'autres threads passeront à cette étape s'ils ne peuvent pas obtenir le verrou. , attendez que le premier thread interroge les données, puis placez les données dans le cache Redis. Les threads ultérieurs arrivent et découvrent qu'il y a déjà un cache, ils vont donc directement au cache.

Résumé :
L'avalanche est une vaste zone de défaillance du cache de clé ; la pénétration est que la clé de cache n'existe pas dans redis ; la panne est une clé de point d'accès dans redis qui échoue soudainement et la victime ultime est la base de données.

7 Pourquoi Redis est-il si rapide

  1. Entièrement basées sur la mémoire, la plupart des requêtes sont de pures opérations de mémoire, très rapides. Les données existent en mémoire, comme HashMap, l'avantage de HashMap est que la complexité temporelle de la recherche et de l'opération est O(1);
  2. La structure de données est simple et l'opération de données est également simple.La structure de données dans Redis est spécialement conçue.
  3. L'utilisation d'un seul thread évite les changements de contexte inutiles et les conditions de concurrence, et ne consomme pas de CPU en raison de la commutation causée par le multi-processus ou le multi-threading. Il n'est pas nécessaire de prendre en compte divers verrous, il n'y a pas d'opération de déverrouillage et il aucune raison possible Consommation de performances causée par un blocage ;
  4. Utilisez plusieurs modèles de multiplexage d'E/S, E/S non bloquantes ;
  5. Les modèles sous-jacents sont différents, les méthodes de mise en œuvre sous-jacentes entre eux et le protocole d'application pour communiquer avec le client sont différents. Redis construit directement le mécanisme de VM par lui-même, car si le système général appelle la fonction système, il gaspillera une certaine quantité de temps. le temps de se déplacer et de demander

8 commandes communes Redis

  • INFO : affiche les informations sur l'état d'exécution de redis du nœud actuel
  • SELECT : changer de base de données, équivalent à la commande USE DBNAME dans MySQL
  • KEYS : affichez toutes les clés sous la bibliothèque actuelle, utilisez cette commande avec prudence !
  • BGSAVE : effectuer manuellement des opérations de persistance RDB en arrière-plan
  • DBSIZE : renvoie le nombre de toutes les clés sous la bibliothèque actuelle
  • FLUSHDB : effacez de force toutes les clés de la base de données actuelle, utilisez cette commande avec prudence !
  • FLUSHALL : effacez de force toutes les clés de toutes les bases de données du serveur Redis actuel, c'est-à-dire supprimez toutes les données. Utilisez cette commande avec prudence !

9 Classification des instructions SQL

  • DDL : langage de définition de données langage de définition de données
    CREATE, DROP, ALTER
  • DML : langage de manipulation de données langage de manipulation de données
    INSERT, DELETE, UPDATE
  • DQL : Langage de requête de données Langage de requête de données
    SELECT
  • DCL : langage de contrôle des données langage de contrôle des données
    GRANT, REVOKE, COMMIT, ROLLBACK

Le nom du développeur du logiciel : CRUD, correspondant à ajout, modification et suppression

10 Requête multi-tables

  • Sous-requête : l'instruction de requête est imbriquée dans l'instruction SQL, les performances sont médiocres et la requête est exécutée à nouveau en fonction du résultat de la requête d'une certaine instruction.
  • Requête conjointe : UNION
  • Connexion croisée : produit cartésien, jointure croisée
  • Connexion interne :
    connexion équivalente : laissez les champs entre les tables établir une relation de connexion avec une "valeur égale"
    Connexion non équivalente
    Connexion naturelle : supprimez la connexion équivalente des colonnes répétées
  • Jointure externe :
    Jointure externe gauche : FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col
    Jointure externe droite : FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col
    Auto-jointure : requête de jointure entre cette table et cette table

exemple:

# 子查询,常用在WHERE子句中的子查询
SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age)FROM teachers);

# 联合查询
SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;

# 交叉连接,即笛卡尔乘积,利用cross join实现
select stuid,s.name st_name,s.age st_age,tid,t.name te_name,t.age te_age from teachers t cross join students s;

# 内连接inner join
select * from students s inner join teachers t on s.teacherid=t.tid;

# 左外连接,outer可以省略
select s.stuid,s.name,s.age,s.teacherid,t.tid,t.name,t.age from students s left outer join teachers t on s.teacherid=t.tid;

# 右外连接
select * from students s right outer join teachers t on s.teacherid=t.tid;

# 自连接
# 构建表
create table emp (id int auto_increment primary key,name varchar(20),leader_id int);
# 实现自连接
select e.name,l.name from emp e inner join emp l on e.leader_id=l.id;

Les questions d"entretien ci-dessus ne sont qu"un résumé personnel. Écrivez ce que vous pensez, sans aucun ordre. S"il y a quelque chose qui ne va pas avec l"écriture, veuillez commenter et laisser un message, et je le corrigerai à temps.

Lien d'origine: Questions d'entretien avec l'ingénieur d'exploitation et de maintenance Linux (4)

Je suppose que tu aimes

Origine blog.csdn.net/qq_45520116/article/details/129338550
conseillé
Classement