Im Jahr 2020 PHP Interview Fragen (II)

A. Was ist CGI? Was ist FastCGI? Was ist die Beziehung zwischen php-fpm, FastCGI, Nginx?

CGI, Common Gateway Interface, verwendete für die Interaktion zwischen der Anwendung und dem WEB - Server, die Definition der Eingangs- und Ausgangsdaten, die Benutzeranforderungen an FastCGI Prozess, FastCGI Prozess dann von dem rufenden Anwendung WEB - Server verarbeitet, wie der Parser php, Anwendung das Verarbeitungsergebnis wird an den HTML FastCGI, FastCGI Nginx kehrt zu den Ausgängen zurückgegeben. Die Annahme , hier WEB - Server Nginx ist, Anwendungen sind PHP und PHP-FPM ist FastCGI verwaltet, die auch die Beziehung zwischen php-fpm, FastCGI und Nginx.
FastCGI CGI - Programm zur Verbesserung der Leistung, einen Master starten, und dann mehrere Arbeiter starten, brauchen Sie nicht eine php.ini zu analysieren. Den PHP-FPM das FastCGI - Protokoll zu erreichen, einen FastCGI - Prozess - Manager , dass Stützen ordnungsgemäßen Start, können Sie beginnen wenn mehrere Prozesse vorab generierte.

Der Unterschied zwischen den beiden .memcache und Redis

Datenstrukturen: memcache unterstützen nur eine einfache Schlüsselwertform, Redis mehr unterstützten Daten (string, Set Set Liste Listen, hash hash, Zsoll Set bestellt);

Multithreading: memcache Unterstützung Multithreading, Redis unterstützt Single-Threaded

Persistenz: Redis Unterstützung Ausdauer, unterstützt memcache nicht persistent

Verteiltes: Redis Schüsse aus der Struktur, memcache Server muss durch eine Hash-Uniform eine Master-Slave-Konfiguration unterstützen,

In der praktischen Anwendung kann ReDiS, memcache Bindung sind memcache Weise wie Sitzungsspeicher, Session-Typ KV-Paare.

 

1. Redis, nicht alle Daten wurden im Speicher gespeichert sind, und dies ist einer der größte Unterschied zu Memcache verglichen.

2. Redis hat in vielerlei Hinsicht charakteristisch für die Datenbank oder ein Datenbanksystem, die zwar Memcache einfach K / V-Cache.

3. Die Erweiterung muss ihre Cluster tun; Implementierung: Master-Slave, Hash.

4. In den obigen Daten 100k, Memcache Leistung als Redis.

5. Wenn etwas einfache Speichereffizienz, die Verwendung von Schlüssel-Wert-Speicher, Memcached dann höhere Speicherauslastung, und wenn die Hash-Struktur eingesetzt do Redis Schlüsselwertspeicher aufgrund seiner modularen Kompression, Speichernutzung davon es wird höher sein als Memcache. Natürlich Merkmale dieses und Ihre Anwendungsszenarien und die zugehörigen Daten.

6. Wenn Sie Sync-Daten Persistenz und Datenanforderungen haben, ist es empfehlenswert, dass Sie Redis zu wählen, weil die beiden Memcache nicht die Eigenschaften haben. Selbst wenn Sie nur auf Cache-Daten wollen nicht nach dem Upgrade oder Neustarten des Systems verloren gehen, wählen Sie Redis weise.

7. Redis und Memcache wenig Unterschied in der Leistung der obigen Schreib, Leseleistung, vor allem über die Leistung der oben Memcache Batch mehr lesen

8.Redis bietet eine Vielzahl von Möglichkeiten auf verschiedenen Ebenen der Ausdauer:

RDB persistenten Datensatz kann innerhalb eines vorgegebenen Zeitintervallzeit Schnappschüssen (point-in-time snapshot) erzeugt werden.

AOF persistent Aufzeichnung aller Schreibbefehle von dem Server ausgeführt wird, und wenn der Server startet Datensätze durch erneute Ausführung dieser Befehle wiederherzustellen. AOF alle Befehle in dem Dateiformat das Redis-Protokoll, der neue Befehl speichern wird bis zum Ende der Datei angehängt werden. Redis kann auch (die Rewrite) AOF von Dateien im Hintergrund neu geschrieben werden, so dass die Datei nicht übersteigt das Volumen der AOF tatsächliche Größe des Datensatzes erforderlich, um den Zustand zu speichern.

Redis können auch die AOF während RDB Beharrlichkeit und Ausdauer verwenden. In diesem Fall, wenn Redis neu gestartet wird, wird es vorrangig auf die Verwendung von AOF-Datei gibt den Datensatz, weil das gespeicherte Datei AOF Datei RDB Datensätze wiederherzustellen als in der Regel mehr vollständigen Datensatz gespeichert.

Sie können sogar die Persistenz-Funktion deaktivieren, so dass nur die Daten in dem Server vorhanden ist, ausgeführt wird.

 

III. Was ist Redis Penetration und Lawinen

** ** Cache Penetration: ist der Zugriffsschlüssel Redis in einer nicht vorhandenen Zeit, direkt durch den Cache, die Datenbank abfragen.

Wenn Sie ein Hacker sind, wenn böswillige Angriffe, jedes Mal über 2000 Anfragen / Sekunde Zeit, diesmal mysql hing im Grunde auf.

 

Die Lösung lautet: pro Abfrage aus der Datenbank zu einem Schlüssel, der nicht existiert, wenn Sie einen Nullwert in der Cache-Datenbank zu schreiben, es ist eine Zeit, böswillige Angriffe, direkt aus dem Cache auf den Nullwert genommen.

 

** ** Cache Avalanche: 5000 Anfrage pro Sekunde im Laufe der Zeit ist, Redis Bibliotheks-Cache Zusammenbruch, dann sofort diese Anfragen auf der MySQL-Datenbank fiel, Datenbank direkte Folge des Absturzes.

Die Lösung ist:

  Voraus: Bibliotheks - Cache die hohe Verfügbarkeit, sowie die Verwendung von Master-Slave - Struktur Sentinel Cluster Cluster zu verbessern,

Dinge: Verwenden Sie ehcache + hystrix Komponente Begrenzung (wenn die Anforderung riesige Menge an Zeit, sie sich selbst nennen eine Herabstufung gut hungrig Komponenten zu entwickeln, einige Standardwerte, wie zum Beispiel Tipps zurückzukehren, oder leer)

Danach: do Persistenz, Recovery-Cache-Cluster so schnell wie möglich, einmal wiederhergestellt, werden die Daten automatisch von der Platte gelesenen Daten im Speicher wiederherzustellen.

 

Was vier .redis Nachrichten-Warteschlange FIFO Notwendigkeit achten?

Typischerweise eine Liste in der Warteschlange Betrieb verwenden, so dass es ein wenig begrenzt ist, ist die Aufgabe der Vereinigung FIFO, wenn Sie eine Aufgabe priorisieren wollen nicht sehr gut mit, zu behandeln, die ein Konzept der Prioritätswarteschlange haben müssen, wir können die Priorität der High-Level-Aufgaben, die Umsetzung der folgenden Arten geben:

 

1) implementieren einzige Liste: Queuing Normalbetrieb direkt aus nach links (lpush, RPOP), um Aufgaben mit hohen Priorität zu behandeln, angesichts der High-Level-Aufgabe, können Sie die Warteschlange direkt springen, direkt in den Kopf der Schlange (rpush), somit wird, wenn der Kopf der Warteschlange (die rechte) von der Erfassungsaufgabe, genommen wird auf die hochpriore Task (RPOP)

2) die Verwendung von zwei Warteschlangen, eine gemeinsame Warteschlange, Senioren Warteschlange, die Warteschlange in eine andere Ebene für die Aufgabe, die Aufgabe bekommen ist sehr einfach, Redis von BRPOP Befehlswerten aus mehreren Warteschlangen in Ordnung, wird BRPOP folgen Schlüssel gegeben, um die Reihenfolge Elemente in einer ersten nicht-leeren Liste anzuzeigen und Pop Schwanz zu finden, redis> BRPOP list1 list2 0

 

`List1 als Task mit hoher Priorität queue`

 

`List2 als gemeinsame Aufgabe queue`

 

`Diese Erkenntnis Prozess mit hohen Priorität Aufgabe, wenn es keine Task mit hohen Priorität, ging gemeinsame Aufgaben zu bekommen

 

`1 Der einfachste Weg, aber die praktische Anwendung mehr eingeschränkt 3 ermöglicht komplexe Priorität, aber komplizierter zu realisieren, ist nicht förderlich für maintaining`

 

`Mode 2 ist die empfohlene Verwendung, die praktische Anwendung der am besten geeigneten"

 

Fünf .Redis wie hohe Parallelität zu verhindern?

In der Tat, Redis ist nicht Gleichzeitigkeit ein Problem ist, weil er ein einzelner Prozess ist, werden mehr Befehle nacheinander ausgeführt. Wenn wir verwenden, kann es durch Themen wie der Erhalt und die Einstellung der richtigen kompliziert sein. Redis ist, warum es hohe Parallelität Probleme ist? Die Entscheidung kam Redis

 

Redis ist Single-Threaded-Mechanismus nosql Datenbank verwendet wird, basierend auf Schlüsselwert, persistente Daten Bestellungen aufgeben können. Da es sich um eine Single-Threaded-redis Konzept ist nicht selbst sperren, Wettbewerb mehrere Client-Verbindungen nicht vorhanden ist, aber das Problem tritt auf, wenn der gleichzeitige Zugriff auf redis jedis und anderen Clients verwenden. Verbindungs-Timeout auftritt, Datenkonvertierungsfehler, Blockierung, schließt der Client die Verbindung und andere Fragen, diese Probleme auf die von Client-Verbindungen verursacht Verwirrung zurückzuführen sind.

Zur gleichen Zeit wird die Art der Entscheidung single-threaded, hohe Parallelität Verarbeitungsoperation wird den gleichen Schlüssel in eine Reihe aufstellen, wenn eine große Menge an Parallelität, kann nachfolgende Anforderungen Timeout.
Wenn Remote - Zugriff Redis , weil das Netzwerk Gründe verursacht durch hohe gleichzeitige Zugriffslatenz Problem zurückgegeben.

Lösung
auf dem Client - Connection - Pooling, während die Client Lese- und Schreiboperationen die interne Sperre mit Redis synchronisiert.

Winkel-Server, Umleitung unter Verwendung setnx Verriegelungsmechanismus implementiert.

VI. Diskussion über die Optimierung von SQL-Anweisungen, auf welche Weise?

(1) Where-Klausel: wobei die Verbindung zwischen den Tischen vor dem anderen geschrieben werden müssen Wo Bedingungen können diese Bedingungen die maximale Anzahl der Datensätze ausfiltern zu Where-Klausel am Ende des letzten .HAVING geschrieben werden.

 

(2) Alternativ dazu gibt es in nicht im alternativ durch NICHT EXISTIERT.

 

(3) vermeidet die Verwendung von Spalten in der Indexberechnung

 

(4) zur Vermeidung der Verwendung von IS NULL und IS NOT NULL Indexspalten

 

(5) die Abfrageoptimierung, sollte versuchen, Full Table Scan zu vermeiden, sollten Sie zunächst die Indizierung durch die in dem Auftrag beteiligt Spalte betrachten.  

 

(6) sollte auf einen Nullwert bestimmt Felder in der WHERE-Klausel vermieden werden, führt dazu, dass der Motor den vollständigen Index und eine Tabellensuche zu geben, sich mit der

 

(7) sollte für Bedienfelder in dem where-Klausel Ausdruck vermieden werden, was der Motor den Index und vollständigen Tabellenscan verursacht aufgeben Verwendung

Ich denke du magst

Origin www.cnblogs.com/a609251438/p/12607792.html
Empfohlen
Rangfolge