Die MySQL -Erweiterung ist ein sehr häufiges Werkzeug, wenn Sie PHP verwenden, um MySQL -Datenbanken zu manipulieren. Manchmal müssen wir $ mysqli-> get_charset () aufrufen, um die von der aktuellen Verbindung verwendeten Zeichensatzinformationen zu erhalten.
Obwohl Get_Charset () selbst nicht so zeitaufwändig ist wie das Abfragen einer Datenbank, kann sie dennoch unnötigen Gemeinkosten bringen, wenn sie häufig in hochfrequenten Anforderungen oder Schleifen aufgerufen wird. Um die Leistung zu optimieren, können wir das Ergebnis von get_charset () in Betracht ziehen, um wiederholte Anrufe zu vermeiden.
In diesem Artikel wird erläutert, wie die Effizienz von Datenbankvorgängen verbessert wird, indem die Ergebnisse der Funktion von MySQLI :: get_charset () zwischengespeichert werden.
Die Funktion von MySQLI :: get_charset () gibt ein Objekt zurück, das die von der aktuellen Verbindung verwendeten Zeichensatzinformationen wie Charset , Collation , Kommentar usw. enthält.
Zum Beispiel:
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
$charsetInfo = $mysqli->get_charset();
echo $charsetInfo->charset; // Ausgang, z.B.:utf8mb4
In den meisten Fällen müssen wir es nicht jedes Mal anrufen, da sich der Zeichensatz nach der Herstellung der Verbindung normalerweise nicht ändert.
In komplexen Anwendungen, insbesondere in großen Frameworks oder hohen Parallelitätsszenarien, werden in jedem Datenbankvorgang eine große Anzahl wiederholter Objekterstellung und Funktionsaufrufe generiert, die CPU und Speicherressourcen verschwenden.
Mit einfachem Caching (z. B. mit statischen Variablen, globalen Variablen, Singleton -Modus) können wir diese Informationen nur einmal erhalten und dann im gesamten Skriptlebenszyklus wiederverwendet.
Hier ist eine einfache Implementierungslösung:
class DatabaseConnection {
private $mysqli;
private $charsetInfo = null;
public function __construct($host, $user, $password, $database) {
$this->mysqli = new mysqli($host, $user, $password, $database);
if ($this->mysqli->connect_error) {
die('Verbindung ist fehlgeschlagen:' . $this->mysqli->connect_error);
}
}
public function getCharsetInfo() {
if ($this->charsetInfo === null) {
$this->charsetInfo = $this->mysqli->get_charset();
}
return $this->charsetInfo;
}
public function query($sql) {
return $this->mysqli->query($sql);
}
public function close() {
$this->mysqli->close();
}
}
// Beispiel für die Nutzung
$db = new DatabaseConnection('localhost', 'user', 'password', 'database');
// Erster Anruf,Wird ausführen get_charset()
$charset = $db->getCharsetInfo();
echo 'Aktueller Zeichensatz:' . $charset->charset . '<br>';
// Nachfolgende Anrufe,Verwenden Sie direkte Werte direkt
$charsetAgain = $db->getCharsetInfo();
echo 'Holen Sie sich den Charakter noch einmal fest(Cache):' . $charsetAgain->charset . '<br>';
// Andere Fragen ausführen
$result = $db->query('SELECT * FROM users');
while ($row = $result->fetch_assoc()) {
echo $row['username'] . '<br>';
}
$db->close();
Funktionen Sie den Funktionsaufruf -Overhead <br> Reduzieren Sie die Häufigkeit, mit der Sie häufig get_charset () aufrufen, insbesondere in Schleifen oder hohen Parallelitätsszenarien.
Verbesserung der Code -Wartbarkeit <br> Zentral verwalten Charakter -Set -Informationen. Wenn Sie die Cache -Richtlinie in Zukunft erweitern oder ändern müssen, müssen Sie nur einen Ort ändern.
Einfach zu debuggen und zu überwachen <br> Die Cache -Ebene kann problemlos Protokolle, Ausgangs- oder Cache -Ausfallmechanismen hinzufügen.
Wenn Ihre Bewerbung verteilt ist oder lange Verbindungen (z. B. Smoke, Workerman usw.), wird empfohlen, den Cache auf den Verbindungspool oder den Global Manager zu erweitern.
Sie können beispielsweise die Verbindungskonfigurationen mit APCU, Memcached oder Redis zwischenstrichen und bei Bedarf über Prozesse hinweg teilen, wodurch die Initialisierungskosten weiter gesenkt werden.
HINWEIS HINWEIS: In Szenarien mit mehreren Thread- oder Mehrprozess-Szenarien ist der Cache statischer Variablen und Objektattribute nur im aktuellen Prozess gültig, und die Strategie muss in Kombination mit der Anwendungsarchitektur angepasst werden.