PHP
Zwischenspeicher
Suche…
Bemerkungen
Zwischenspeicherung mit Memcache
Memcache ist ein verteiltes Objekt-Caching-System und verwendet einen key-value
zum Speichern kleiner Daten. Bevor Sie mit dem Aufrufen von Memcache
Code in PHP beginnen, müssen Sie sicherstellen, dass er installiert ist. Das kann mit der class_exists
Methode in PHP gemacht werden. Sobald die Installation des Moduls überprüft wurde, beginnen Sie mit der Verbindung zur memcache-Serverinstanz.
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
Dadurch wird überprüft, dass Memcache-PHP-Treiber installiert sind und eine Verbindung mit der Memcache-Server-Instanz hergestellt wird, die auf Localhost ausgeführt wird.
Memcache wird als Daemon ausgeführt und heißt Memcache
Im obigen Beispiel haben wir nur eine Verbindung zu einer einzelnen Instanz hergestellt, Sie können jedoch auch eine Verbindung zu mehreren Servern herstellen
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
Beachten Sie, dass in diesem Fall im Gegensatz zu connect keine aktive Verbindung besteht, bis Sie versuchen, einen Wert zu speichern oder abzurufen.
Beim Caching gibt es drei wichtige Vorgänge, die implementiert werden müssen
- Daten speichern: Neue Daten zu memcached Server hinzufügen
- Daten abrufen : Daten vom memcached Server abrufen
- Daten löschen: Löschen Sie bereits vorhandene Daten von einem zwischengespeicherten Server
Daten speichern
$cache
oder memcached-Klassenobjekt verfügt über eine set
Methode, die einen Schlüssel, einen Wert und Zeit zum Speichern des Werts für (ttl) benötigt.
$cache->set($key, $value, 0, $ttl);
Hier ist $ ttl oder time to live die Zeit in Sekunden, in der memcache das Paar auf dem Server speichern soll.
Daten empfangen
$cache
oder memcached class object verfügt über eine get
Methode, die einen Schlüssel aufnimmt und den entsprechenden Wert zurückgibt.
$value = $cache->get($key);
Falls für den Schlüssel kein Wert festgelegt ist, wird null zurückgegeben
Daten löschen
Manchmal müssen Sie möglicherweise einen Cache-Wert löschen. $cache
oder memcache-Instanz hat eine delete
, die für dieselbe verwendet werden kann.
$cache->delete($key);
Kleines Szenario für das Caching
Nehmen wir einen einfachen Blog an. Es werden mehrere Posts auf der Zielseite vorhanden sein, die bei jedem Laden der Seite aus der Datenbank abgerufen werden. Um die SQL-Abfragen zu reduzieren, können wir memcached verwenden, um die Beiträge zwischenzuspeichern. Hier ist eine sehr kleine Implementierung
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
if(($data = $cache->get('posts')) != null) {
// Cache hit
// Render from cache
} else {
// Cache miss
// Query database and save results to database
// Assuming $posts is array of posts retrieved from database
$cache->set('posts', $posts,0,$ttl);
}
}else {
die("Error while connecting to cache server");
}
Cache mit APC-Cache
Der Alternative PHP Cache (APC) ist ein freier und offener Opcode-Cache für PHP. Ziel ist es, ein kostenloses, offenes und robustes Framework für das Zwischenspeichern und Optimieren von PHP-Zwischencode bereitzustellen.
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
Cache hinzufügen:
apc_add ($key, $value , $ttl);
$key = unique cache key
$value = cache value
$ttl = Time To Live;
Cache löschen:
apc_delete($key);
Cache-Beispiel festlegen:
if (apc_exists($key)) {
echo "Key exists: ";
echo apc_fetch($key);
} else {
echo "Key does not exist";
apc_add ($key, $value , $ttl);
}
Leistung :
APC ist fast fünfmal schneller als Memcached.