F: Welche Art von Cache ist ein guter Cache?
Ein Cache, der ein Problem löst, ist ein guter Cache. Dieser Satz ist einfach Unsinn, gleichbedeutend mit weißer Katze, schwarzer Katze und derjenige, der Mäuse fängt, ist eine gute Katze.
Unter der Voraussetzung, das Problem zu lösen, welcher Cache ist der beste Cache? Meine Antwort auf diese Frage lautet: Ein Cache mit einer hohen Cache-Trefferquote ist ein guter Cache.
Unter der Prämisse, das Problem zu lösen, erfordert ein Cache mit einer hohen Trefferquote möglicherweise weniger Hardware-Investitionen als ein Cache mit einer niedrigen Trefferquote. Gleichzeitig kann die Anzahl der Caches kleiner sein als die Anzahl der Caches mit einer niedrigen Trefferquote Auf diese Weise wird die Adressierungsgeschwindigkeit definitiv erhöht. Ein Cache mit einer hohen Trefferquote ist also ein guter Cache.
Cache-Trefferquote
Nachdem eine zwischengespeicherte Entität in den Cache geworfen wurde und sie nicht ein einziges Mal von der Außenwelt verwendet wurde, während die Entität zwischengespeichert wird (während des Lebenszyklus der zwischengespeicherten Entität), beträgt die Trefferquote der zwischengespeicherten Entität 0. Je öfter diese Entität angefordert wird, desto höher ist ihre Cache-Trefferquote.
Was oben erwähnt wurde, ist die Trefferquote einer Entität im Cache. Für den Cache als Ganzes ist seine Trefferquote das Trefferquotenverteilungsdiagramm jeder einzelnen zwischengespeicherten Person oben.
Zum Caching: Normalerweise machen die am häufigsten verwendeten Personen nur einen sehr kleinen Teil der Gesamtmenge aus. Die am wenigsten genutzten Produkte machen einen großen Anteil am Gesamtvolumen aus.
Deshalb sehen wir oft Daten wie diese:
Von den 10.000 zwischengespeicherten Elementen werden 100 häufig, fast jede Minute, verwendet. 2000 Daten, einmal pro Stunde abgefragt. Einmal am Tag werden 3000 Daten angefordert, und die verbleibenden Daten wurden nach dem Ablegen in den Cache kein einziges Mal verwendet.
Heutzutage entwickelt sich die Hardware rasant weiter. Wenn wir nur 10.000 Daten zwischenspeichern müssen, können wir alle 10.000 Daten unabhängig davon, ob sie verwendet werden, vollständig in den Cache werfen Daten im Cache. Es ist nicht erforderlich, zusätzliche Vorgänge auszuführen oder Anfragen an die Datenbank zu stellen.
Allerdings: Die Hardware entwickelt sich rasant weiter und damit auch die Datenmenge. Wenn bei einer kleinen Website 10.000 Daten zwischengespeichert werden, werden alle zwischengespeichert. Allerdings verfügen große Websites über mindestens Millionen von Daten oder T-Level-Daten. Offensichtlich können nicht alle diese Daten in den Cache geworfen werden. Zu diesem Zeitpunkt ist es sehr wichtig, eine vernünftige Caching-Lösung zu entwerfen und die Cache-Trefferquote zu verbessern. Und es ist notwendig.
Einige gängige Methoden zur Verbesserung der Cache-Trefferquote
Aus rein technischer Sicht erfassen wir lediglich die Anzahl der Benutzeranfragen pro Zeiteinheit und speichern die am häufigsten verwendeten Daten basierend auf diesen Informationen im Cache.
Aber in den meisten Fällen verbessern wir die Cache-Trefferquote basierend auf der Geschäftslogik. Zum Beispiel: Letztes Jahr und der Blog, der vorletztes Jahr veröffentlicht wurde, erfolgten die Browsing-Anfragen für diese Art von Artikeln in der Regel mindestens ein paar Mal am Tag. Im Allgemeinen sollte es nicht im Speicher zwischengespeichert werden.
Ein weiteres Beispiel: Ein Beitrag mit vielen Antworten wird im Allgemeinen von mehr Leuten angesehen als ein Beitrag mit weniger Antworten.
Wir sollten die obige Logik verwenden und einen Caching-Algorithmus bereitstellen, der auf unserer tatsächlichen Geschäftslogik basiert, um die Cache-Trefferquote zu verbessern. Lassen Sie uns die entsprechenden Daten zwischenspeichern und nicht alle Daten, wie es unsere Hardware zulässt.
Ein negatives Beispiel ist: Egal was passiert, eine große Blog-Site: Wenn ein Benutzer einen Artikel anfordert, wird festgestellt, dass er sich nicht im Speichercache befindet. Daher wird er aus der Datenbank gelesen und dann in den Cache geworfen.
Wissen Sie, es gibt mittlerweile viele Crawler. Darüber hinaus geht bei suchmaschinenfreundlichen Websites wie Blogs der größte Zugriffsdruck von Suchmaschinen aus. Diese Besuche dauern in der Regel eine Stunde oder einen Tag, mit nur wenigen oder sogar einer einzigen Anfrage für einen bestimmten Artikel, und dann nie wieder. Die Trefferquote der oben genannten Caching-Methode ist sehr niedrig.
Jemand könnte hier fragen, Guo Hongjun, da Sie mir nicht empfehlen, den Inhalt dieser Blogs zwischenzuspeichern, aber wie kann ich die Leistung meiner Website verbessern? Ich muss zumindest sicherstellen, dass meine Blog-Site nicht zu langsam reagiert auf Benutzerwünsche.
Es gibt viele Lösungen für dieses Problem. Eine der einfachsten Methoden besteht darin, diese Blogs in statische HTML-Seiten umzuwandeln. Aufgrund der Festplatte kann das Dateisystem einfach als unendlich erweiterbar angesehen werden. sodass viele Inhalte mit einer geringen Trefferquote zwischengespeichert werden.
Wenn Ihre Seite eine dynamische Logikbeurteilung erfordert, können Sie die Daten in XML-Dateien zwischenspeichern und dann integriert das Serversegment diese XML-Dateien oder schließt Dateien ein. Das ist auch ein guter Ansatz.
Nachdem wir so viele Fragen zur Cache-Trefferquote angesprochen haben, fassen wir kurz die Ansichten zur Cache-Trefferquote zusammen:
Kleine Websites können alle Daten zwischenspeichern, und im Allgemeinen ist der Druck nicht groß, sodass Probleme mit der Cache-Trefferquote ignoriert werden können.
Große Dienste können nicht alle Daten zwischenspeichern, sondern nur einen Teil der Daten. Zu diesem Zeitpunkt muss der Architekt eine für die Geschäftslogik geeignete Caching-Methode entwerfen, um die Cache-Trefferquote so weit wie möglich zu verbessern.
Die meisten Methoden zur Verbesserung der Trefferquote sind an die Geschäftslogik gebunden und erfordern eine detaillierte Analyse spezifischer Probleme. Bei Daten, die nicht im Speicher zwischengespeichert werden können, ist die Verwendung von Datei-Caching die einfachste Möglichkeit, die Leistung zu verbessern.
Durch das Datei-Caching kann der gesamte Inhalt in einer statischen Datei zwischengespeichert werden. Außerdem kann es einen Bereich der gesamten Seite in einer Datei zwischenspeichern und dann eine Entität zum Zwischenspeichern in eine XML-Datei einbinden.
Schauen wir uns einige andere, weniger wichtige Aspekte des Cachings an:
Lebenszyklusaktivitäten zwischenspeichern
Inhalte, die niemals ablaufen oder sich für immer ändern, sollten nicht im Cache abgelegt werden. Der Cache ist ein temporärer und kein permanenter Speicher, daher ist der Cache-Lebenszyklus begrenzt.
Im Gegenzug kann es folgende Aktivitäten durchlaufen:
Geben Sie den Cache ein. (Beim Betreten des Caches müssen Sie möglicherweise dessen zukünftige Ablaufrichtlinie angeben. Wenn nicht angegeben, müssen Sie die standardmäßige Ablaufrichtlinie des Systems verwenden.)
Rufen Sie es aus dem Cache ab. Beachten Sie, dass zu diesem Zeitpunkt Thread-Sicherheitsprobleme behoben werden müssen.
Beachten Sie beim Aktualisieren des Caches, dass Sie beim Verlassen des Caches auch Thread-Sicherheitsprobleme berücksichtigen müssen. Dies kann eine externe Anforderung sein oder der Cache kann aufgrund der Ablaufrichtlinie gelöscht werden.
Cache-Ablaufrichtlinie
Im Allgemeinen würde ich fragen: Auf welche Cache-Ablaufstrategien sind Sie in den Caches gestoßen, mit denen Sie in Kontakt gekommen sind?
Die gängigsten Ablaufstrategien sind wie folgt:
Wenn es längere Zeit nicht angefordert wurde, läuft es ab. Die typischste Funktion ist die von ASP und ASP.net bereitgestellte Abschnittsfunktion. Tatsächlich handelt es sich um einen Cache.
Der Cache, der auf Dateiänderungen basiert, läuft ab, sobald die Datei geändert wird, normalerweise die Web.config der WEB-Site. Sobald sich die Datei ändert, wird nicht nur der Cache neu gestartet, sondern der IIS-Prozess führt auch eine Freigabe durch.
Auf dieser Grundlage werden möglicherweise Cache-Ablaufrichtlinien für viele Abhängigkeiten angezeigt. Beispielsweise eine Cache-Ablaufrichtlinie, die auf der Datenbank basiert.
Natürlich kann es in der Geschäftslogik komplexere Ablaufstrategien geben. In der neuen Version des CSDN-Punktesystemforums löscht der Post-List-Cache 550 Daten, wenn der Listendaten-Cache 600 erreicht.
Ein weiteres Beispiel ist, dass der Cache neuer punktebasierter Forenbeiträge abläuft, wenn keine Liste auf den Beitrag verweist und der Beitrag abläuft.
Problem mit der Cache-Synchronisierung
Die Verwendung von Cache bedeutet, dass mehrere Kopien derselben Daten nebeneinander existieren können. Wenn Ihr Code eine bestimmte Situation nicht berücksichtigt, sind die beiden Daten inkonsistent. Dann treten Probleme auf.
Die Lösung ist einfach. Denken Sie sorgfältig über Ihre Geschäftslogik und Code-Auslösesituationen nach und verlassen Sie keine Bereiche, die noch nicht am Tiefpunkt angelangt sind.
Einfache Methoden können Ihre Codelogik sehr komplex machen.
Aus diesem Grund empfehlen einige Leute, Caching nicht zu verwenden, wenn es nicht notwendig ist. Sobald Sie mit der Verwendung von Caching beginnen, sollten Sie darauf vorbereitet sein, viel Code für die Datensynchronisierung hinzuzufügen.
Cache-Daten initialisieren und füllen
Manchmal müssen nach der Initialisierung des Caches einige Daten vorab in den Cache gefüllt werden. Dies ist der Initialisierungsvorgang für zwischengespeicherte Daten.
Die folgenden Probleme müssen während des Initialisierungsvorgangs zwischengespeicherter Daten berücksichtigt werden:
Wie lange dauert die Initialisierung? Wenn es sich um eine Site handelt, können wir diese Initialisierungsarbeit in Application_OnStart von Global.asa durchführen. Die Initialisierung darf im Allgemeinen nicht zu lange dauern. Zu diesem Zeitpunkt wird unsere Codeoptimierungsfähigkeit getestet.
Während der Initialisierung werden Daten normalerweise stapelweise importiert, anstatt bei normaler Verwendung jeweils nur einzelne Daten zu verarbeiten.
Zusammenfassen:
In diesem Artikel werden einige meiner Ansichten zum Caching vorgestellt, ohne näher auf bestimmte Caching-Technologien einzugehen. Ich hoffe, dass durch die Beschreibung dieses Artikels Menschen, die nur die Verwendung von Caching kennen, aber die Idee des Cachings nicht verstehen, ein vorläufiges Verständnis erlangen können.
http://blog.csdn.net/ghj1976/archive/2007/09/01/1768676.aspx