Grundlegende Memcache Fragen in PHP

8

Ich habe Memcache vorher noch nie benutzt, entschuldige bitte meine Unerfahrenheit. Obwohl es ziemlich selbsterklärend ist, würde ich gerne sicherstellen, dass ich die eingebauten Funktionen richtig verwende, da ich eine Klasse erstelle, die kommerziell verwendet wird, so dass sie korrekt codiert und effizient sein muss.

Ich habe mehrere Fragen, aber da sie sehr einfach sind, dachte ich, es wäre in Ordnung, sie zu einer Stackoverflow-Frage zusammenzufassen.

Wenn sie eine Antwort auf ein Essay benötigen, bitte nicht stören, und ich werde es als separate Frage veröffentlichen

  1. Wann müsste ich memcache::addServer verwenden und was ist der Unterschied zwischen% und memcache::connect ?
  2. Überschreibt Memcache gespeicherte Werte, wenn nicht genügend Speicher vorhanden ist, auch wenn das Element noch nicht abgelaufen ist?
  3. Wofür würde ich memcache::getExtendedStats verwenden?
  4. Wie überprüfe ich, ob bereits eine Verbindung zu Memcache besteht und wenn nicht, erstelle eine Verbindung?
  5. Wenn ich meinen üblichen memcache-Server 'localhost' eingerichtet habe, wie würde ich dann einen anderen memcache-Server auf meinem dedizierten Server einrichten?
  6. Was nützt neben mehr Speicher mehr als ein Memcache-Server?
  7. Soll ich regelmäßig nach Updates für Memcache-Server suchen?
  8. Wird am Anfang jeder Seite sehr viel Speicher verwendet, um Memcache :: Connect auszuführen, auch wenn ich es nicht verwende?
  9. Wann werde ich wahrscheinlich Fehler zurückgeben und wie fange ich diese?
  10. Am wichtigsten, wenn ich Memcache innerhalb einer anderen Klasse verwende, die mehrere Methoden hat, die mehr als einmal pro Skript aufgerufen werden können, wie soll ich das Objekt initialisieren und innerhalb jeder Methode mit dem Server verbinden?

Meine Vermutung für die letzte Frage wäre, es so zu machen:

%Vor%

Wie Sie im obigen Beispiel sehen können, verbinde ich mich am Anfang des Skripts mit dem Memcache-Server. Wenn ich dies am Anfang jeder Seite einfügen würde, sogar auf Seiten, die Memcache nicht verwenden, würde dies die Antwortzeit um viele oder minimale Beträge erhöhen? Daher Frage 8!

    
Ben Carey 03.02.2012, 17:34
quelle

1 Antwort

23

Vielleicht brauchen Sie etwas Kaffee oder etwas, bevor Sie das lesen:

  1. Sie möchten Memcache::addServer verwenden, wenn Sie weitere Memcached-Server hinzufügen müssen. Zum Beispiel, wenn Sie eine sehr beschäftigte Website oder Web-App hatten ... würden Sie wahrscheinlich mehr als einen Memcached-Server haben wollen, auf dem 1 läuft. Memcache::connect wird verwendet, wenn Sie eine Verbindung zu einem Ihrer Memcached-Server herstellen möchten. Gemäß Memcache::addServer docs besteht ein weiterer Unterschied zwischen Memcache::addServer und Memcache::connect darin, dass die Verbindung mit Memcache::addServer erst hergestellt wird, wenn sie tatsächlich benötigt wird.

  2. Wenn Memcached nicht mehr über RAM verfügt, werden die ältesten Werte 3 gelöscht.

  3. Memcache::getExtendedStats wird verwendet, um Informationen zu Ihrem Memcached-Server zu überprüfen. Zum Beispiel, wenn Sie herausfinden müssen, wie lange der Server war (Uptime), wie viele Verbindungen der Server hat, oder allgemeine Server-Nutzung 4 , ist dies ein großartiges Werkzeug.

  4. Die einfachste Möglichkeit zu überprüfen, ob bereits eine Verbindung zu Memcached besteht, besteht darin, Ihre $ memcache-Verbindungsvariable zu überprüfen, um zu sehen, ob sie TRUE 5 zurückgibt. Wenn Sie eine persistente Verbindung benötigen (die auch nach dem Ende Ihres Skripts weiterläuft), können Sie Memcache::pconnect 6 verwenden.

  5. Wenn Sie möchten, dass zwei Memcached-Server laufen ... und Ihr erster Server bereits Ihr localhost ist, werden Sie höchstwahrscheinlich einen separaten, eigenen Server für den zweiten 7 .

  6. Mindestens ein weiterer Vorteil von mehr als einem Memcached-Server besteht darin, dass Sie immer, wenn Sie Ihre Daten (oder Server) diversifizieren, selbst wenn ein Server ausfällt, immer noch viele andere Server haben die Scherben zusammenklauben. Memcached sieht 8 so aus, als wäre es über viele Server verteilt, die Sie gerade ausführen ... Wenn also ein Server ausfällt, verlieren Sie immer noch diesen Teil des Caches. Aber Sie haben immer noch andere Server in Betrieb, um weiterzumachen.

  7. Im Allgemeinen ist es keine schlechte Idee, fast jede Art von Software auf dem neuesten Stand zu halten. Es sieht so aus, als wäre Memcached immer noch ein sehr aktives Projekt 9 , also sollten Sie es vielleicht aktualisieren, wenn Sie können. Aber die Essenz von Memcached scheint sich im Vergleich zu früheren Versionen nicht sonderlich zu ändern ... daher ist es vielleicht nicht so wichtig, sie zu aktualisieren, wie etwa bei der Betriebssystemsoftware.

  8. Es klingt wie die Art, wie Memcached Speicher für TCP-Verbindungen zuweist (wenn Sie über Memcache::connect auf Ihren Memcached-Server anrufen), kostet Sie der Speicher 10 . Wenn Sie sicher sind, dass Sie diese Verbindung auf einigen Ihrer Seiten nicht benötigen, sollten Sie den Verbindungsaufruf vermeiden.

  9. Schwer zu sagen, welche Art von Fehlern in Ihrem Code auftreten könnte. Aber mit etwas wie Memcached, finden Sie möglicherweise Fehler, wenn Sie nicht mehr genügend Speicher 11 .

  10. Wie die Antwort auf Frage acht, würde ich trotzdem empfehlen, den $memcache->connect() nur in Bereichen zu nennen, in denen Sie ihn unbedingt brauchen. Möglicherweise verwenden Sie Memcached in vielen Ihrer Anwendungen oder Skripts. aber es wird wahrscheinlich immer noch Orte geben, wo du es nicht brauchen wirst.

Was Ihre Code-Idee für Frage 10 angeht, liegt es wirklich an Ihnen, was die Implementierung angeht. Im Allgemeinen ist es gut zu versuchen, wenn möglich globale Variablen zu vermeiden. Wie in dem Artikel (12) in der Fußnote gesagt, ist es einfacher, einfach einen Singleton-Klassenaufruf für eine Verbindung zu verwenden ... und dann jedes Mal, wenn Sie eine Verbindung herstellen wollen, einfach anzurufen.

Wow, meine Augen sind müde. Ich hoffe, das hilft, Mann ...!

1 Ссылка (siehe Abschnitt Architektur)

2 Ссылка

3 Ссылка (siehe Abschnitt Architektur)

4 Ссылка

5 Ссылка (siehe Abschnitt Rückgabewerte)

6 Ссылка

7 Ссылка

8 Vorteile von mehreren memcached Instanzen

9 Ссылка

10 Ссылка (aus der Sicht von Facebook)

>

11 Ссылка

12 Wie vermeidet man die Verwendung globaler PHP-Objekte?

    
summea 04.02.2012, 06:45
quelle

Tags und Links