Eingehende Analyse des ThinkPHP-Cache-Quellcodes
"Cache ist eine Funktion, die verwendet wird, nachdem das Projekt über einen bestimmten Zeitraum ausgeführt wurde. In diesem Artikel wird eine detaillierte Analyse des Caches im Framework durchgeführt
"
Vorwort
Im Projekt ist der Cache eine unverzichtbare Funktion. Wenn die Anzahl der Benutzer groß ist, ist das Caching erforderlich. Wenn Sie die Datenbank direkt überprüfen, ist dies zu schlecht für die Benutzererfahrung.
Unter welchen Umständen sollten Sie also Caching verwenden?
Heiße Ereignisse, wie z. B. Weibo-Hot-Suchen Selten aktualisierte Daten, wie z. B. Konfigurationselemente Blog-Plattform-Rangliste Beobachtungsliste für soziale Plattformen, Fanliste usw.
The Die oben genannten Anwendungsszenarien beziehen sich nicht auf den Cache des Frameworks. Im Allgemeinen wird der Cache des Frameworks nicht auf Cache-Ebene verwendet.
Häufig verwendet werden Redis, Memcache und anderes NoSQL.
Aber die heutige Hauptdiskussion ist das Caching im Framework. Denken Sie also nicht, dass das Caching des Frameworks allmächtig ist, es hängt immer noch von der tatsächlichen Situation des Projekts ab.
1. Ausführungsprozess der Cache-Einstellungen und Quellcode-Analyse
Zuerst müssen Sie den folgenden Fall implementieren und die Cache-Klasse einführen
Wie läuft der Cache ab?
Nur der CodeCache::set
Wissen Sie, wie das jetzt funktioniert? Wenn Sie Kaka nicht kennen, bringe ich Sie dazu, es eingehend zu lernen.
Wir alle wissen, dass die Eintragsdatei des Frameworks index.php ist und eine Datei namens base.php in die Eintragsdatei eingeführt wird.
Gehen Sie zur Datei base.php und erfahren Sie, wie Sie sich im Abschnitt zum Framework-Ausführungsprozess registrieren zurück zu Machen Sie weiter und erfahren Sie mehr.
Der Code wird also in der Fassadenklasse im Kern des Frameworks ausgeführt. In dieser Klasse gibt es eine Methode __callStatic. Diese Methode wird ausgeführt, wenn eine nicht vorhandene statische Methode vorhanden ist angerufen.
Wie führt man diese Überprüfung durch? Das kann man doch nicht einfach so sagen, das ist doch so, oder?
Dann kommt der Code zur Methode zum Erstellen einer Facade-Instanz. Der Test, den wir durchführen, besteht darin, den Wert dieser Klasse auszudrucken.
Unabhängig davon, wie oft dieser Cache ausgeführt wurde, können Sie deutlich erkennen, dass dieser Wert im Druckergebnis vorhanden ist. Dies ist also eine weitere ungeschickte Möglichkeit, Kakas Aussage zu überprüfen.
Hier gibt es ein sehr kleines Detail, das meiner Meinung nach jeder kennen sollte, nämlich die Verwendung von Statik.
Tipps zu Statik Erben Sie diese Fassaden-Fassadenklasse
Vererbung der Klasse Fassadenklasse Demonstrationstatisch Wenn es vererbt wird, wird die Unterklasse standardmäßig aufgerufen, andernfalls ruft sie sich selbst auf
Das Folgende hier ist auch die Methode in der ausgeführte Unterklasse.
Okay, lasst uns eine kleine Pause einlegen, dann kommen wir zum Hauptthema.
Der Code wird also so ausgeführt: thinkphp/library/ think/Cache.php
Diese Datei ist der Speicherort der Kernklassenbibliothek. thinkphp/library/think/Cache.php
这个文件,也就是核心类库的位置。
在这个方法你是找不到set方法的,所以代码将会执行到__call方法,这个方法当调用不存在的方法时则会触发的方法。
Eingehende Analyse des ThinkPHP-Cache-Quellcodes
根据执行流程我们将会看到init这个方法Eingehende Analyse des ThinkPHP-Cache-Quellcodes(这里需要注意,第一次并不是在这里进行执行的,而是Eingehende Analyse des ThinkPHP-Cache-Quellcodes,当Eingehende Analyse des ThinkPHP-Cache-Quellcodes执行完后会把值存放在handler这个属性,第二次通过call方法进来之后就直接返回了,而不会在进行一次执行,这里一定要注意)
在这里我们进行打印一次$options
Automatisch initialisierter Cache
Entsprechend dem Ausführungsprozess werden wir sehen, dass die Init-Methode den Cache automatisch initialisiert (hier ist zu beachten, dass die erste Ausführung nicht hier ist, sondern die Make-Methode. Wenn die Make-Methode ausgeführt wird, wird die Der Wert wird in gespeichert. Das Handler-Attribut wird direkt nach der zweiten Eingabe über die Aufrufmethode zurückgegeben und nicht erneut ausgeführt (Sie müssen hier aufpassen)
🎜
Wenn Sie beim Erstellen eines Caches eine Facade-Instanz erstellen, achten Sie während dieses Vorgangs auf den eingekreisten Bereich im Bild unten und führen Sie eine make-Methode aus, die 800 Mal gesehen wurde.
Wenn Sie zur Make-Methode kommen, schauen Sie sich einfach die eingekreiste Stelle an
Dann geben Sie die invokeClass
-Methode ein, Diese Methode ruft die Instanziierung einer Reflexionsausführungsklasse auf und unterstützt die Abhängigkeitsinjektion.
Bei dieser Methode wird die Make-Methode im Cache durch Reflektion ausgeführt.
Damit die Make-Methode in der Cache-Klasse ausgeführt wird, wird diese Methode instanziiert und der Konstruktor ausgeführt.
Gehen Sie zum Konstruktor und Sie werden sehen, dass die von der Make-Methode erhaltenen Konfigurationselemente der Cache-Konfigurationsdatei an die Init-Methode übergeben werden, die den Teil automatisch initialisiert Cache.
Von hier aus können Sie sehen, dass die Init-Methode den Cache automatisch initialisiert. Die erste Ausführung wird ausgeführt, wenn der Container instanziiert wird, also $options
wird einen Wert haben. $options
才会存在值。
接下来将顺着这个流程进行Eingehende Analyse des ThinkPHP-Cache-Quellcodes也就是代码$this->handler = $this->connect($options);
这块的内容。
这个方法就很简单了,就是使用了之前一直讲解的工厂模式实现的加载不同类型的缓存方式。
然后会把返回的对象存放在以$options
md5为下标的缓存实例属性$instance
$this->handler = $this->connect($options);
Der Inhalt dieses Blocks. 🎜🎜Diese Methode ist sehr einfach. Sie verwendet das zuvor erläuterte Factory-Muster, um verschiedene Cache-Typen zu laden. 🎜🎜Dann wird das zurückgegebene Objekt in $options md5 ist das tiefgestellte Cache-Instanzattribut<code style="font-size: 14px; Zeilenumbruch: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba (27,31,35,.05); Schriftfamilie: Operator Mono, Consolas, Menlo, monospace: break-all;">$instance Innen. 🎜<figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"><img src="/static/imghw/default1.png" data-src="https://img-blog.csdnimg.cn/20201120232141758.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdrYW5nNw==,size_16,color_FFFFFF,t_70#pic_center" class="lazy" alt="Eingehende Analyse des ThinkPHP-Cache-Quellcodes" style="max-width:90%"><figcaption style="margin-top: 5px; text-align: center; color: rgb(136, 136, 136); font-size: 12px;">Mit dem Cache verbinden</figcaption></figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Der endgültige Code wird an die __call-Methode im Cache zurückgegeben, die Klasse ist <code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba(27,31,35,.05); font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(271, 93, 108);">object(thinkcachedriverFile)
方法为set
Dann wird die Der Ausführungsprozess kommt an den unten stehenden Ort und schreibt Cache
Dateinamen abrufen
Eines der wichtigsten Dinge, die Sie bei dieser Methode verstehen müssen, ist, wie Sie den spezifischen Dateinamen abrufen und dann speichern die Daten im Cache.
Dieser Namenswert ist der Wert, den wir festlegen müssen, wechat.
Gehen Sie dann zu getCacheKey, um den Speicherdateinamen der Variablen abzurufen.
Der erste Schritt bei dieser Methode besteht darin, den Typ und den Cache-Wert durch Hashing zu verschlüsseln. Diese Optionen werden in dieser Klasse deklariert und müssen hier klar sein.
Da die Optionsvariable im Framework häufig verwendet wird, sollten Sie sie nicht verwechseln.
Was Sie bei dieser Methode verstehen müssen, ist, wie der Dateiname ermittelt wird.
Sie müssen noch zum Anfang dieser Klasse gehen, um den Wert dieser Optionen zu überprüfen. In dieser Klasse können Sie sehen, dass der im Bild oben verwendete Verschlüsselungstyp hash_type ist md5
Dann gehen Sie zum Konstruktor und Sie können die Pfadeinstellung sehen
Sie können diese Zeile sehen Im obigen Bild wird diese Codezeile verwendet. Der Container führt auch die Make-Methode aus. Diese Make-Methode spielt im Container eine sehr wichtige Rolle und muss daher gut verstanden werden. Container::get('app')
Sie können zu diesem Zeitpunkt die erstellte Datei überprüfen und sehen, dass die Datei erstellt wurde.
Abschließend verwenden Sie die Funktion file_put_contents, um die Daten am gerade erhaltenen Speicherort der Cache-Datei zu speichern
Das Datenbankspeicherformular ist Wie unten gezeigt
Bis zu diesem Punkt sind die Framework-Cache-Einstellungen abgeschlossen. In diesem Fall ist das von Kaka verwendete Dateiformat das gleiche wie für Redis oder andere.
2. Ausführungsprozess und Quellcode-Analyse der Cache-Cache-Erfassung
Nachdem Sie nun die Quellcode-Analyse der Cache-Einstellungen gelernt haben, sollten Sie auch kurz die Quellcode-Analyse der Cache-Erfassung verstehen.
Derselbe Demonstrationsfall ist derselbe wie zuvor, nur set durch get ersetzen
Der Vorgang zum Einrichten des Caches ist derselbe. Zuerst gelangen Sie zur Fassadenklasse, um die entsprechende Instanz des Caches zu erstellen
Nachdem die Fassadenklasse die Cache-Klasse erstellt hat, gelangen Sie zur Cache-Klassendateithinkphp/library/think/Cache.php
In dieser Datei können Sie sehen, dass die __call-Methode weiterhin verwendet wird. Diese Methode dient zum Aufrufen einer nicht vorhandenen Methode und wird ausgeführt.
Dann gelangen Sie zur Init-Methode. Diese Methode wurde beim Festlegen des Cache-Werts ausführlich erläutert.
Je nach Ausführungsprozess werden wir sehen, dass die Init-Methode den Cache automatisch initialisiert (hier ist zu beachten, dass die erste Ausführung nicht hier ist, sondern die Make-Methode. Wenn die Make-Methode ausgeführt wird, wird der Wert angezeigt wird im Handler-Attribut gespeichert, nachdem es zum zweiten Mal über die Aufrufmethode eingegangen ist, kehrt es direkt zurück, ohne es erneut auszuführen. (Sie müssen hier darauf achten.)
Warum die Make-Methode des Caches hier zuerst ausgeführt wird, liegt am Cache Klasseninstanz wird im Container erstellt. Zu diesem Zeitpunkt wird in der Make-Methode beurteilt, ob in der Klasse eine Make-Methode vorhanden ist, und wenn vorhanden, wird sie zuerst ausgeführt.
Also in der Cache-Klassethinkphp/library/think/cache/driver/File.php
Die get-Methode dieser Klassereturn call_user_func_array([$this->init(), $method], $args);
这块代码会去执行thinkphp/library/think/cache/driver/File.php
这个类的get方法
在这个类中你可以看到一个在设置缓存值时花了好久解析的一个方法getCacheKey

Read Cache
Zeit zum Parsen beim Festlegen des Cache-Werts ,31,35,.05); Schriftfamilie: Operator Mono, Consolas, Monaco, Monospace; Farbe: rgb(271, 93, 108);">getCacheKey 🎜Rufen Sie den Speicherdateinamen der Variablen ab🎜🎜🎜Dann verwenden Sie file_get_contents, um den Inhalt der Datei abzurufen🎜Dann können Sie weiter nach unten schauen. Hier befindet sich eine abgelaufene gelöschte Cache-Datei.
Die Ablaufrichtlinie im Framework sieht vor, dass der Cache beim Festlegen der Ablaufzeit nicht direkt nach Ablauf gelöscht wird, sondern nach erneutem Zugriff gelöscht wird.
Diese Strategie ist das verzögerte Löschen. Wenn wir das verzögerte Löschen verwenden, werden die Daten nicht automatisch gelöscht, wenn der Schlüsselwert das nächste Mal abgerufen wird abgelaufen. Wenn es abgelaufen ist, löschen Sie es.
Bisher wurde der Ausführungsprozess der Cache-Erfassung durch Quellcode-Analyse abgeschlossen. Tatsächlich wurde der größte Teil des Inhalts beim Abrufen analysiert.
Warum reden wir dann immer noch über das Abrufen zwischengespeicherter Daten? Das liegt daran, dass wir Ihnen hier etwas erklären müssen.
3. Datenkomprimierung
Beim Einrichten des Caches gibt es eine Funktion, um den zwischengespeicherten Wert in die Datei gzcompress
gzcompress
然而在获取缓存值的时候从文件将数据读出时又遇到的一个函数gzuncompress
gzuncompress
In der Tat, vom Setzen des Caches bis zum Abrufen des Caches Aus der Funktion ist ersichtlich, dass die komprimierten Daten festgelegt und die dekomprimierten Daten erhalten werden. 🎜Es gibt zwei weitere Komprimierungsfunktionen in PHP: gzdeflate、gzencode
,同样的解压函数也是对应的gzinflate gzdecode
Obwohl diese Funktionen alle Komprimierungsfunktionen sind, sind die zugrunde liegenden Implementierungen unterschiedlich.
gzcompress verwendet das ZLIB-Format;
gzdeflate verwendet das GZIP-Format;
Das Obige enthält einige Kenntnisse über Datenkomprimierung und -dekomprimierung.
In diesem Abschnitt führt Sie Kaka durch die Verarbeitungsergebnisse des Cachings durch das Framework.
Tatsächlich hat Kaka zuvor getestet, dass die Cache-Antwortzeit des Frameworks um ein Drittel verkürzt werden sollte. Dies hängt natürlich auch von der Größe der Daten ab.
Dies ist das Ende der Quellcode-Interpretation des PHP-Frameworks
ThinkPHP Wenn ich später Zeit habe, werde ich einige der nicht erwähnten Inhalte interpretieren. Schließlich ist das Lesen des Quellcodes wirklich anstrengend.
„Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, die Kaka seit seiner Karriere immer vertreten hat. Ich hoffe, dass Kakas Artikel in Nuoda Internet Ihnen ein wenig helfen können , nächste Ausgabe Siehe.”
Das obige ist der detaillierte Inhalt vonEingehende Analyse des ThinkPHP-Cache-Quellcodes. 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

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

ThinkPHP-Installationsschritte: Bereiten Sie PHP-, Composer- und MySQL-Umgebungen vor. Erstellen Sie Projekte mit Composer. Installieren Sie das ThinkPHP-Framework und die Abhängigkeiten. Datenbankverbindung konfigurieren. Anwendungscode generieren. Starten Sie die Anwendung und besuchen Sie http://localhost:8000.

Leistungsvergleich von Laravel- und ThinkPHP-Frameworks: ThinkPHP schneidet im Allgemeinen besser ab als Laravel und konzentriert sich auf Optimierung und Caching. Laravel schneidet gut ab, aber für komplexe Anwendungen ist ThinkPHP möglicherweise besser geeignet.

„Entwicklungsvorschläge: So verwenden Sie das ThinkPHP-Framework zur Implementierung asynchroner Aufgaben“ Mit der rasanten Entwicklung der Internettechnologie stellen Webanwendungen immer höhere Anforderungen an die Verarbeitung einer großen Anzahl gleichzeitiger Anforderungen und komplexer Geschäftslogik. Um die Systemleistung und das Benutzererlebnis zu verbessern, erwägen Entwickler häufig die Verwendung asynchroner Aufgaben, um einige zeitaufwändige Vorgänge auszuführen, z. B. das Senden von E-Mails, das Verarbeiten von Datei-Uploads, das Erstellen von Berichten usw. Im Bereich PHP bietet das ThinkPHP-Framework als beliebtes Entwicklungsframework einige praktische Möglichkeiten zur Implementierung asynchroner Aufgaben.

ThinkPHP ist ein leistungsstarkes PHP-Framework mit Vorteilen wie Caching-Mechanismus, Codeoptimierung, Parallelverarbeitung und Datenbankoptimierung. Offizielle Leistungstests zeigen, dass es mehr als 10.000 Anfragen pro Sekunde verarbeiten kann und in großen Websites und Unternehmenssystemen wie JD.com und Ctrip in praktischen Anwendungen weit verbreitet ist.

Entwicklung des ThinkPHP6-Backend-Managementsystems: Implementierung von Backend-Funktionen Einführung: Mit der kontinuierlichen Weiterentwicklung der Internettechnologie und der Marktnachfrage benötigen immer mehr Unternehmen und Organisationen ein effizientes, sicheres und flexibles Backend-Managementsystem zur Verwaltung von Geschäftsdaten und zur Durchführung des Betriebsmanagements. In diesem Artikel wird das ThinkPHP6-Framework verwendet, um anhand von Beispielen zu demonstrieren, wie ein einfaches, aber praktisches Backend-Verwaltungssystem entwickelt wird, das grundlegende Funktionen wie Berechtigungskontrolle, Datenhinzufügung, Löschung, Änderung und Abfrage umfasst. Umgebungsvorbereitung Bevor wir beginnen, müssen wir PHP, MySQL, Com installieren
