2008-08-06 10 views
9

Derzeit kenne ich nur zwei Möglichkeiten, um Daten zwischenzuspeichern (ich benutze PHP, aber ich nehme an, dass das gleiche für die meisten Sprachen gilt).Welche Methoden zum Caching, außer zu einer Datei oder Datenbank, sind verfügbar?

  1. Speichern Sie den Cache in einer Datei
  2. Speichern Sie den Cache zu einem großen DB Feld

es andere (vielleicht besser) Weisen Caching oder ist es wirklich nur diese einfach?

+0

Kannst du dieser Frage einen richtigen Titel geben? Z.B. "Was sind die besten Methoden zum Cachen von Daten?", "Welche Methoden des Caching, außer zu Datei oder Datenbank, sind verfügbar?", Oder ähnlich. –

Antwort

2

Vielleicht möchten Sie genauer angeben, was Sie zwischenspeichern möchten. Sie haben alle diese Möglichkeiten cachen:

  • Zugriff auf die Datenbank wo Sie die Daten-Cache zuerst die korrekte Schreibweise Ihrer RDBMS Tuning, dann eine Schicht mit der Entscheidung zu delegieren mehrere Abfragen für die gleichen Daten zu erfassen (mit AdoDB zum Beispiel.)
  • Extrahieren von Berechnungen aus Schleifen im Code, so dass Sie nicht den gleichen Wert mehrmals berechnen. Hier ist Ihre dritte Möglichkeit: Speichern von Ergebnissen in der Sitzung für den Benutzer.
  • Vorkompilieren des PHP-Codes mit einer Erweiterung wie APC Cache. Auf diese Weise müssen Sie nicht für jede Anfrage den gleichen PHP-Code kompilieren.
  • Die Seite wurde an den Benutzer gesendet Stellen Sie sicher, dass Sie die richtigen META-Tags setzen (tun Sie eine gute Sache für die Welt und ETL nicht mindestens absolut notwendig); oder vielleicht dynamische Seiten komplett statisch machen (mit einem Batch-Prozess, der HTML-Seiten erzeugt); oder indem Sie einen Proxy-Cache wie Squid verwenden.
  • Prefetching und damit verweise ich auf all diese Möglichkeiten, die Sie haben, um die Benutzererfahrung zu verbessern, indem Sie einfach Dinge tun, während der Benutzer nicht in Ihre Richtung sieht. Zum Beispiel IMG-Tags in der HTML-Datei Vorbelastung TUNNING das RDBMS für prefectching, Ergebnisse zu speichern komplexe Berechnungen in der Datenbank precomputing usw.

Aus meiner Erfahrung, ich Sie darauf wetten würde, dass der Code eine verbessert werden kann viel bevor wir anfangen über Dinge zu cachen. Stellen Sie sich zum Beispiel vor, wie strukturiert die Navigation Ihrer Site ist und wie gut Sie die Benutzererfahrung steuern. Dann überprüfen Sie Ihren Code mit einem Tool wie XDebug.

Überprüfen Sie auch, wie gut Sie Ihre SQL-Abfragen erstellen und wie gut Sie Ihre Tabellen indizieren. Dann überprüfen Sie Ihren Code erneut, um nach Möglichkeiten zu suchen, die Regel "lesen Sie viele Male, aber schreiben Sie nur einmal"

Verwenden Sie ein einfaches Tool wie YSlow, um andere einfache Dinge anzudeuten, um zu verbessern. Überprüfen Sie den Code erneut der Suche nach Möglichkeiten zu setzen Logik im Browser (via JavaScript)

1

Sie können auch im Speicher zwischenspeichern, was sehr viel effizienter ist. Versuchen Sie memcached.

0

Memcached entsendenden, macht die einfache Sachen gut und distributive gehen und alle, die Jazz, wenn Sie es brauchen zu

0

Wenn Sie Mit Apache können Sie mit mod_rewrite Ihre Webseiten statisch zwischenspeichern. Nehmen wir an, Sie verwenden PHP und Sie haben eine Anfrage für "/somepage.php". In deinem ..htaccess-Datei setzen Sie wie folgt vor:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries 
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests 
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes 
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead 

Wenn Ihr Cache leer auftaucht, wird die Anforderung von PHP-Skript wie gewohnt behandelt, so jetzt ist es einfach eine Frage der PHP-Skript speichern die resultierende HTML-Code im Cache machen . Der einfachste Weg, dies zu tun, wird unter Verwendung eines anderen htaccess Regel Ende anhängen ein paar PHP-Dateien auf alle Ihre PHP-Anfragen vorangestellt wird (dies könnte oder nicht eine gute Idee sein, je nach Anwendung):

php_value auto_prepend_file "pre_cache.php" 
php_value auto_append_file "post_cache.php" 

Dann Sie würde so etwas tun:

pre_cache.php:

ob_start(); 

post_cache.php:

$result = ob_get_flush(); 
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests 
    file_put_contents("static_cache/" + __FILE__, $result); 
} 

Mit einigen zusätzlichen regulären Ausdrücken in der .htaccess-Datei könnten wir wahrscheinlich auch Abfrage-String-Anforderungen zwischenspeichern, aber ich überlasse das als Übung für den Leser :)