Heim > Artikel > Backend-Entwicklung > Installation und Nutzung von php-Memcached
1. Einführung und Installation
Memcached ist ein leistungsstarkes verteiltes Speicherobjekt-Caching-System, das normalerweise zur Reduzierung des Datenbankladedrucks verwendet wird, um die Reaktionsgeschwindigkeit dynamischer Webanwendungen zu verbessern.
Diese Erweiterung nutzt die von der libmemcached-Bibliothek bereitgestellte API, um mit dem Memcached-Server zu interagieren. Es bietet auch einen Sitzungshandler (im Cache gespeichert).
Informationen zur Memcached-Installation finden Sie in diesem Artikel: Installation und Konfiguration von Memcached in Ubuntu.
Bevor Sie die PHP-Erweiterung memcached installieren, müssen Sie libmemcached installieren, die lokale C/C-Client-Bibliothek von memcached.
Bevor Sie libmemcached installieren, müssen Sie zunächst libcloog-ppl0 installieren, andernfalls tritt während des Kompilierungs- und Installationsprozesses ein Fehler auf:
sudo apt-get install libcloog-ppl0
Laden Sie es dann von hier herunter: http://libmemcached. org/libMemcached.html Entpacken Sie das erforderliche libmemcached-Quellcode-Installationspaket in das angegebene Verzeichnis, geben Sie das Verzeichnis ein und führen Sie dann die folgenden Anweisungen aus:
./configure --prefix=/usr/local/libmemcached make sudo make install
Anschließend können Sie die erforderliche PHP-Memcached-Erweiterung installieren Quellcode von hier Installationspaket: http://pecl.php.net/package/memcached, entpacken Sie es in das angegebene Verzeichnis, geben Sie das Verzeichnis ein und führen Sie dann die folgenden Anweisungen aus:
phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached make sudo make install
Ein Fehler kann während des Installationsprozesses gemeldet werden:
未知类型名称:memcached_server_instance_st
führt dazu, dass make fehlschlägt. Die Lösung lautet wie folgt:
Suchen Sie diese Datei im Dekomprimierungsverzeichnis der Memcached-Erweiterung: php_libmemcached_compat.h und dann Fügen Sie die folgende Zeile hinzu
typedef const struct memcached_server_st *memcached_server_instance_st;
Machen Sie es noch einmal und es wird in Ordnung sein.
Fügen Sie nach erfolgreicher Installation extension=memcacached in php.ini hinzu, starten Sie dann Apache neu, überprüfen Sie phpinfo und sehen Sie sich den folgenden Abschnitt an
Beweisen Sie, dass die Installation erfolgreich war.
2. Timeout
Einige Speicherbefehle enthalten einen Ablaufwert (im Zusammenhang mit einem Element oder einer Client-Vorgangsanforderung), wenn sie an den Server gesendet werden. Für alle derartigen Verwendungen kann der tatsächlich gesendete Wert ein Unix-Zeitstempel (eine ganze Zahl von Sekunden seit dem 1. Januar 1970 bis zur Ablaufzeit) oder eine Zahl in Sekunden von jetzt an sein. Im letzteren Fall darf diese Anzahl von Sekunden 60×60×24×30 (die Anzahl von Sekunden in 30 Tagen) nicht überschreiten; wenn der ungültige Wert größer als dieser Wert ist, wird er vom Server als echter Unix-Zeitstempel behandelt ein Offset von der aktuellen Zeit.
Wenn der Ablaufwert auf 0 (Standard) gesetzt ist, läuft das Element nie ab (es kann jedoch vom Server gelöscht werden, um Platz für andere neue Elemente zu reservieren).
3. Rückrufe
1. Ergebnisrückrufe
Ergebnisrückrufe sind das Ergebnis nach dem Abrufen des Elements über Memcached::getDelayed() oder Memcached::getDelayedBykey(). Methode wird einmal für jedes Element in der Menge aufgerufen. Die Rückruffunktion kann ein Memcached-Objekt und durch ein Array beschriebene Elementinformationen empfangen. Diese Rückruffunktion muss keine Informationen zurückgeben.
Beispiel #1 Ergebnis-Callback-Beispiel
<?php $m = new Memcached(); $m->addServer('localhost', 11211); $items = array( 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' ); $m->setMulti($items); $m->getDelayed(array('key1', 'key3'), true, 'result_cb'); function result_cb($memc, $item) { var_dump($item); } ?>
Die Ausgabe der obigen Routine ist ähnlich wie:
array(3) { ["key"]=> string(4) "key1" ["value"]=> string(6) "value1" ["cas"]=> float(49) } array(3) { ["key"]=> string(4) "key3" ["value"]=> string(6) "value3" ["cas"]=> float(50) }
2. Lesen Sie den Cache-Callback durch
Durchlesen Der Cache-Callback wird aufgerufen, wenn ein Element nicht vom Server abgerufen wird. Diese Rückruffunktion empfängt drei Parameter: das Memcached-Objekt, den angeforderten Schlüssel und eine als Referenz übergebene Wertvariable. Diese Rückruffunktion ist für die Entscheidung verantwortlich, einen Standardwert festzulegen, wenn der Schlüssel keinen Wert hat, indem sie „true“ oder „false“ zurückgibt. Wenn der Rückruf „true“ zurückgibt, speichert Memcached den im „ausgehenden Parameter“ (der als Referenz übergebenen Wertvariablen) gespeicherten Wert auf dem Memcached-Server und gibt ihn an die ursprüngliche aufrufende Funktion zurück. Nur Memcached::get() und Memcached::getByKey() unterstützen diese Art von Rückruf, da das Memcache-Protokoll die Bereitstellung von Informationen über nicht abgerufene Schlüssel bei der Anforderung mehrerer Schlüssel nicht unterstützt.
Beispiel #2 Rückrufbeispiel durchlesen
<?php $m = new Memcached(); $m->addServer('localhost', 11211); $profile_info = $m->get('user:'.$user_id, 'user_info_cb'); function user_info_cb($memc, $key, &$value) { $user_id = substr($key, 5); /* 从数据库读取个人信息 */ /* ... */ $value = $profile_info; return true; } ?>
4. Sitzungsunterstützung
memcached bietet einen benutzerdefinierten Sitzungsprozessor, der zum Speichern von Benutzersitzungsdaten im Memcached-Server verwendet werden kann . Intern wird eine vollständig separate Memcached-Instanz verwendet, sodass Sie bei Bedarf einen anderen Serverpool einrichten können. Sitzungsschlüssel werden unter dem Präfix memc.sess.key gespeichert. Beachten Sie dies daher bitte, wenn Sie denselben Serverpool für Sitzungen und normales Caching verwenden. Anmerkung: Ein weiterer Grund, warum die Sitzung vom normalen Cache getrennt wird, besteht darin, dass Ihre Sitzung möglicherweise aus dem Cache geworfen wird, wenn der normale Cache den zwischengespeicherten Server füllt, was dazu führt, dass der Benutzer aus unerklärlichen Gründen getrennt wird.
session.save_handler ist auf „memcached“ gesetzt, um den Sitzungsprozessor von „memcached“ zu aktivieren. session.save_path definiert einen durch Kommas getrennten Sitzungscache-Serverpool im Hostnamen:Port-Stil, zum Beispiel: „sess1:11211, sess2:11211“.
5. Die Memcached-Klasse
stellt den Memcached-Dienst dar Clusterverbindungen.
Memcached::add – Ein Element zu einem neuen Schlüssel hinzufügen
Memcached::addByKey – Ein Element zu einem neuen Schlüssel auf dem angegebenen Server hinzufügen
Memcached::addServer — Fügen Sie einen Server zum Serverpool hinzu
Memcached::addServers – Mehrere Server zum Serverpool hinzufügen
Memcached::append – Daten an vorhandene Elemente anhängen
Memcached::appendByKey – Daten zum angegebenen Server hinzufügen Daten anhängen nachdem das Element existiert
Memcached::cas – Werte vergleichen und austauschen
Memcached::casByKey — Werte auf dem angegebenen Server vergleichen und austauschen
Memcached::__construct — Erstellen Sie eine Memcached-Instanz
Memcached::decrement — Verringern Sie den Wert eines numerischen Elements
Memcached::decrementByKey — Verringern Sie den Wert eines numerischen Elements, der auf einem bestimmten Server gespeichert ist
Memcached: :delete – Ein Element löschen
Memcached::deleteByKey – Ein Element vom angegebenen Server löschen
Memcached::deleteMulti – Mehrere Elemente löschen
Memcached::deleteMultiByKey – Mehrere Elemente von einem bestimmten Server löschen
Memcached::fetch – Nächstes Ergebnis abrufen
Memcached::fetchAll – Alle verbleibenden Ergebnisse abrufen
Memcached::flush – Ungültig machen alle Elemente im Cache
Memcached::get – Element abrufen
Memcached::getAllKeys – Ruft die auf allen Servern gespeicherten Schlüssel ab
Memcached::getByKey – Elemente abrufen von einem angegebenen Server
Memcached::getDelayed – Mehrere Elemente von einem angegebenen Server anfordern
Memcached::getDelayedByKey – Mehrere Elemente von einem angegebenen Server anfordern
Memcached:: getMulti — Mehrere Elemente abrufen
Memcached::getMultiByKey — Mehrere Elemente von einem bestimmten Server abrufen
Memcached::getOption — Optionswert von Memcached abrufen
Memcached::getResultCode — Gibt den Ergebniscode der letzten Operation zurück
Memcached::getResultMessage — Gibt die Ergebnisbeschreibungsnachricht der letzten Operation zurück
Memcached::getServerByKey — Ruft die durch einen Schlüssel zugeordneten Serverinformationen ab
Memcached::getServerList – Ruft die Serverliste im Serverpool ab
Memcached::getStats – Ruft die Statistiken des Serverpools ab
Memcached::getVersion – Ruft die Versionen aller ab Server im Serverpool Information
Memcached::increment – Erhöhen Sie den Wert eines numerischen Elements
Memcached::incrementByKey – Erhöhen Sie den Wert eines numerischen Elements, der auf einem bestimmten Server gespeichert ist
Memcached::isPersistent – Prüfen, ob eine dauerhafte Verbindung zum Memcache verwendet wird
Memcached::isPristine – Prüfen, ob die Instanz kürzlich erstellt wurde
Memcached::prepend – Daten vorne anhängen eines vorhandenen Elements
Memcached::prependByKey – Daten einem vorhandenen Element auf einem bestimmten Server voranstellen
Memcached::quit – Alle offenen Verbindungen schließen
Memcached::replace – Ersetzen Sie das vorhandene Element unter dem Schlüsselelement
Memcached::replaceByKey – Ersetzen Sie das Element unter einem vorhandenen Schlüssel auf einem bestimmten Server
Memcached::resetServerList – Löscht alle Server aus der Serverliste
Memcached::set – Ein Element speichern
Memcached::setByKey – Ein Element auf einem bestimmten Server speichern
Memcached::setMulti – Mehrere Elemente speichern
Memcached ::setMultiByKey – Mehrere Elemente auf einem bestimmten Server speichern
Memcached::setOption – Eine Memcached-Option festlegen
Memcached::setOptions – Memcached-Optionen festlegen
Memcached::setSaslAuthData – Legen Sie die Anmeldeinformationen fest, die für die Authentifizierung verwendet werden sollen
Memcached::touch – Legen Sie einen neuen Ablauf für ein Element fest
Memcached::touchByKey – Legen Sie einen neuen Ablauf für ein Element auf einem bestimmten Server fest