


Machen Sie sich mit dem Golang-MySQL-Datenbankverbindungspool vertraut
Das Folgende ist eine Einführung in den Golang-MySQL-Datenbankverbindungspool aus der Golang-Tutorial-Kolumne. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!
Vor kurzem habe ich die Go-Sprache ORM verwendet, um einige Datenbankoperationen durchzuführen, und schließlich einen Fehler gefunden, der zu einer ungültigen Verbindung führte. Deshalb habe ich mich über die Zeitüberschreitung des Verbindungspools und von MySQL informiert Erklären Sie es unten. (Ich verstehe, dass die Sprachen alle miteinander verbunden sind und die Prinzipien gleich sein sollten.)
Wenn wir die Datenbank hinzufügen, löschen, ändern und überprüfen möchten, besteht der erste Schritt darin, eine Verbindung zur Datenbank herzustellen.
//conn the database func ConnDb(dbConnString string, dbName string) error { maxIdle := 50 maxConn := 50 err := orm.RegisterDataBase(dbName, "mysql", dbConnString+"?charset=utf8&loc=Asia%2FShanghai", maxIdle, maxConn) if err != nil { util.GLogger.Errorw("in Connect DB", "err", err) } return err }
Die Verbindung hier ist die MySQL-Datenbank. Der maximale Verbindungspool ist auf 50 und der maximale Leerlauf eingestellt Verbindung ist 50.
Und wofür wird dieser Verbindungspool hauptsächlich verwendet? Einfach ausgedrückt: Wenn Sie Daten aus der Datenbank abrufen und ändern möchten, müssen Sie eine Pipeline mit der Datenbank einrichten. Wir alle wissen, dass TCP-Verbindungen zeitaufwändig sind Es hat eine gewisse Zeit gedauert, bis ich diese Pipeline gebaut habe. Wie kann ich sie also nehmen und verwenden, ohne sie wegzuwerfen? Dann ist der Verbindungspool der Ort, an dem diese etablierten Pipes gespeichert werden. Der Wert von 50 kann einfach als maximal 50 Pipes verstanden werden. Beachten Sie, dass je größer, desto besser, denn wenn er zu groß ist, wird er natürlich mehr Speicher beanspruchen , es wird zu viel Speicher beanspruchen, wenn es zu klein ist, wird es auf Blockierung warten.
Da diese Rohre im Verbindungspool platziert sind, bezieht sich die Leerlaufverbindung auf diese Leerlaufrohre. Es ist offensichtlich, dass der Wert der Leerlaufverbindung nicht größer sein sollte als die Größe des Verbindungspools, denn wenn er größer ist , der Verbindungspool hilft Ihnen nicht, so viele inaktive Verbindungsleitungen zu sparen.
Wie sieht der Arbeitsablauf jedes Mal aus, wenn Sie auf die Datenbank zugreifen, nachdem Sie diese einfachen Konzepte verstanden haben?
Auf diesem Bild können wir den gesamten Verbindungszugriffsprozess deutlich sehen.
Schritt 1 (Verfügbare Verbindungen abrufen) Gehen Sie zum Verbindungspool, um verfügbare inaktive Verbindungen zu finden. Wenn nicht, erstellen Sie eine neue Verbindung. Warten Sie dann, bis die Verbindung freigegeben wird. Wenn eine Verbindung im Leerlauf ist, wird natürlich direkt festgestellt, ob die Verbindung abgelaufen ist ob der Verbindungspool voll ist. Wenn nicht, erstellen Sie eine neue Verbindung und warten Sie, wenn sie voll ist.
Schritt2 (Operationsdatenbank) Nachdem Sie diese Verbindung hergestellt haben, führen Sie die Vorgänge zum Hinzufügen, Löschen, Ändern und Überprüfen aus.
Schritt 3 (Verbindung freigeben) Nach dem Betrieb der Datenbank müssen Sie die Verbindung freigeben. Wenn die Anzahl der inaktiven Verbindungen überschritten wird, wird sie direkt geschlossen Warten.
Dann werden Sie feststellen, dass diese Verbindung abläuft:
Zeitüberschreitung der MySQL-Datenbank. Wenn Sie eine Verbindung mit der Datenbank herstellen, kann die Datenbank Ihnen nicht immer vertrauen, sodass die Datenbank nach dieser Zeit abläuft Sie müssen Ihrer Verbindung nicht mehr vertrauen. Überprüfen Sie die verschiedenen von der Datenbank festgelegten Zeitüberschreitungen wie folgt:
show variables like '%timeout%';
Dabei gibt es zwei Zeitüberschreitungen: Zeitüberschreitung bei interaktiver Verbindung (interactive_timeout) und Zeitüberschreitung bei nicht interaktiver Verbindung ( wait_timeout)
Interaktive Verbindung: Sie stellen über die Befehlszeile eine Verbindung zu MySQL her
Nicht interaktive Verbindung: Sie stellen im Programm eine Verbindung zu MySQL her
Und dieses nicht interaktive Timeout Das heißt, wenn die Leerlaufzeit einer Verbindung abgelaufen ist Wenn der Leerlauf im Verbindungspool die Einstellung „wait_timeout“ überschreitet, wird er ungültig. Wenn das Programm dann zu diesem Zeitpunkt die inaktive Verbindung erhält und eine Abfrage durchführt, wird das ursprüngliche Problem angezeigt: ungültige Verbindung.
Nachdem Sie die Grundprinzipien verstanden haben, ist die Lösung für ungültige Verbindungen ganz einfach:
1. Verlängern Sie die Wait_Timeout-Zeit der Datenbank.
2. Das Programm überprüft diese fehlgeschlagenen Verbindungen regelmäßig und verwirft sie rechtzeitig. Beachten Sie, dass die Prüfzeit des Programms hier kürzer sein muss als der von MySQL festgelegte Wert für wait_timeout.
Das Obige ist mein Verständnis des Verbindungspools. Wenn es Fehler gibt, weisen Sie sie bitte darauf hin. ~
Das obige ist der detaillierte Inhalt vonMachen Sie sich mit dem Golang-MySQL-Datenbankverbindungspool vertraut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Wie konfiguriere ich Verbindungspooling für Go-Datenbankverbindungen? Verwenden Sie den DB-Typ im Datenbank-/SQL-Paket, um eine Datenbankverbindung zu erstellen. Legen Sie MaxOpenConns fest, um die maximale Anzahl gleichzeitiger Verbindungen festzulegen. Legen Sie ConnMaxLifetime fest, um den maximalen Lebenszyklus der Verbindung festzulegen.

In Go umfasst der Funktionslebenszyklus Definition, Laden, Verknüpfen, Initialisieren, Aufrufen und Zurückgeben; der Variablenbereich ist in Funktionsebene und Blockebene unterteilt. Variablen innerhalb einer Funktion sind intern sichtbar, während Variablen innerhalb eines Blocks nur innerhalb des Blocks sichtbar sind .

In Go können Sie reguläre Ausdrücke verwenden, um Zeitstempel abzugleichen: Kompilieren Sie eine Zeichenfolge mit regulären Ausdrücken, z. B. die, die zum Abgleich von ISO8601-Zeitstempeln verwendet wird: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Verwenden Sie die Funktion regexp.MatchString, um zu überprüfen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.

In Go können WebSocket-Nachrichten mit dem Paket gorilla/websocket gesendet werden. Konkrete Schritte: Stellen Sie eine WebSocket-Verbindung her. Senden Sie eine Textnachricht: Rufen Sie WriteMessage(websocket.TextMessage,[]byte("message")) auf. Senden Sie eine binäre Nachricht: Rufen Sie WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}) auf.

Go und die Go-Sprache sind unterschiedliche Einheiten mit unterschiedlichen Eigenschaften. Go (auch bekannt als Golang) ist bekannt für seine Parallelität, schnelle Kompilierungsgeschwindigkeit, Speicherverwaltung und plattformübergreifende Vorteile. Zu den Nachteilen der Go-Sprache gehören ein weniger umfangreiches Ökosystem als andere Sprachen, eine strengere Syntax und das Fehlen dynamischer Typisierung.

Speicherlecks können dazu führen, dass der Speicher des Go-Programms kontinuierlich zunimmt, indem: Ressourcen geschlossen werden, die nicht mehr verwendet werden, wie z. B. Dateien, Netzwerkverbindungen und Datenbankverbindungen. Verwenden Sie schwache Referenzen, um Speicherlecks zu verhindern, und zielen Sie auf Objekte für die Garbage Collection ab, wenn sie nicht mehr stark referenziert sind. Bei Verwendung von Go-Coroutine wird der Speicher des Coroutine-Stapels beim Beenden automatisch freigegeben, um Speicherverluste zu vermeiden.

In Golang können Sie mit Fehler-Wrappern neue Fehler erstellen, indem Sie Kontextinformationen an den ursprünglichen Fehler anhängen. Dies kann verwendet werden, um die von verschiedenen Bibliotheken oder Komponenten ausgelösten Fehlertypen zu vereinheitlichen und so das Debuggen und die Fehlerbehandlung zu vereinfachen. Die Schritte lauten wie folgt: Verwenden Sie die Funktion „errors.Wrap“, um die ursprünglichen Fehler in neue Fehler umzuwandeln. Der neue Fehler enthält Kontextinformationen zum ursprünglichen Fehler. Verwenden Sie fmt.Printf, um umschlossene Fehler auszugeben und so mehr Kontext und Umsetzbarkeit bereitzustellen. Wenn Sie verschiedene Fehlertypen behandeln, verwenden Sie die Funktion „errors.Wrap“, um die Fehlertypen zu vereinheitlichen.

Das Testen gleichzeitiger Funktionen in Einheiten ist von entscheidender Bedeutung, da dies dazu beiträgt, ihr korrektes Verhalten in einer gleichzeitigen Umgebung sicherzustellen. Beim Testen gleichzeitiger Funktionen müssen grundlegende Prinzipien wie gegenseitiger Ausschluss, Synchronisation und Isolation berücksichtigt werden. Gleichzeitige Funktionen können Unit-Tests unterzogen werden, indem Rennbedingungen simuliert, getestet und Ergebnisse überprüft werden.
