2009-04-04 7 views
1

Ich habe vor kurzem Gipping meiner Inhalte mit PHP ob_gzhandler Funktion, die die Dinge wirklich einfach hält implementiert.memcache gziped Inhalt mit PHP Ob_gzhandler

Ich versuche nun, diesen Inhalt zu meinem Memcache hinzuzufügen, und hatte gehofft, dass es einen einfachen Weg dazu gab, aber ich konnte nichts online finden, um dies zu erreichen.

Ich habe nur Memcache in der Vergangenheit verwendet, um Daten zu speichern, die in einer Variablen gehalten wurde, aber mit dem Ob_gzhandler, ich habe keine Variable mit den Daten darin. Ich weiß also leider nicht einmal, wo ich damit anfangen soll.

Dank Pete

----- bearbeiten, um weitere Informationen ------------------------- Als Cody unten kommentiert Offensichtlich war meine Frage vage. Tut mir leid, ich versuche so viele Informationen wie möglich zu geben, bin aber in diesem Prozess wirklich ein bisschen verloren.

Wenn ich Memcache zuvor verwendet habe, habe ich überprüft, ob die Daten in Memcache basierend auf einem Hash der URL-Anfrage existiert. Wenn es eine Übereinstimmung gab, griff ich auf die zwischengespeicherten Daten. Wenn nicht, würde ich die Seite erstellen und im Cache speichern.

Jetzt versuche ich das gleiche zu tun, aber mit gezippten Daten mit dem PHP Ob_gzhandler.

Aber wie Ciaran gesagt hat, könnte es sinnvoller sein, nur den Treffer zum Speichern der nicht gezippten Daten zu nehmen.

Gleichzeitig wäre es schöner, die gezippte Version zu speichern, da es sowohl kleiner ist, so dass ich mehr im Cache speichern konnte, und sind nicht fast alle Browser gzip kompatibel?

Antwort

1

Es klingt, als würden Sie nach einem passiven Cache fragen, wo Sie Code haben, der einen Cache abfragt, und bei einem Cache-Miss die Daten erzeugt, in Ihren Cache einfügt und dann zurückgibt. Kurz gesagt, Ihr Code wird immer einen Teil der Daten zurückgeben, aber egal, ob er ihn durch Berechnung oder durch einen Treffer im Cache zurückgibt, nun, der aufgerufene Code interessiert das nicht.

Ist das korrekt?

Letztendlich ist Ihre Frage vage und enthält nicht genügend Informationen.

+0

Entschuldigung, Cody, ich habe versucht, ein bisschen mehr hinzuzufügen, aber Sie sind in dem Prozess richtig, den ich verwende, um die zwischengespeicherten Daten zu erstellen – pedalpete

1

ob_gzhandler() gibt entweder einen String oder false zurück, je nachdem, ob der Client-Browzer gzip unterstützt, deflate oder keine Kodierung. Wahrscheinlich verwenden Sie diese Funktion über ob_start() oder ähnliches.

Da das Ergebnis pro Client unterschiedlich ist, ist es keine gute Idee, das Ergebnis zwischenzuspeichern (dh in einigen Fällen ist es FALSE, in einigen Fällen ist es eine Deflate-codierte Antwort und in anderen wird es eine 'gzip'-codierte Antwort sein.

Es scheint sinnvoller zu sein, den Inhalt, der gezippt wird, zwischenzuspeichern und den "Treffer" zu nehmen, der bei jeder Anforderung neu komprimiert wird - in der Praxis sollte das kein großer Aufwand sein.

0

Wenn es nur darum geht, die Anzahl der in den Speicher übertragenen Bytes zu reduzieren, gibt es eine Reihe von Clients, die die Daten komprimieren können, bevor sie an Memcache gesendet werden (50K Komprimierung ist sinnvoll, 5 Bytes nicht so viel)). Wie @Ciaran sagt, ist der Aufwand, um dann für die endgültige Lieferung zu komprimieren - falls erforderlich - nicht so viel.