Zoeken…
Opmerkingen
Caching met behulp van memcache
Memcache is een gedistribueerd objectcaching-systeem en gebruikt key-value
voor het opslaan van kleine gegevens. Voordat u Memcache
code in PHP begint op te roepen, moet u ervoor zorgen dat deze is geïnstalleerd. Dat kan met de methode class_exists
in php. Nadat is bevestigd dat de module is geïnstalleerd, begint u met het verbinden met een memcache-serverinstantie.
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
Dit valideert dat Memcache php-stuurprogramma's zijn geïnstalleerd en verbinding maken met memcache-serverinstantie die op localhost wordt uitgevoerd.
Memcache wordt uitgevoerd als een daemon en wordt memcached genoemd
In het bovenstaande voorbeeld hebben we slechts verbinding gemaakt met één exemplaar, maar u kunt ook verbinding maken met meerdere servers via
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
Merk op dat in dit geval, anders dan bij Connect, er geen actieve verbinding is totdat u probeert een waarde op te slaan of op te halen.
Bij caching zijn er drie belangrijke bewerkingen die moeten worden geïmplementeerd
- Gegevens opslaan: nieuwe gegevens toevoegen aan server in memcache
- Gegevens ophalen: gegevens ophalen van een in de cache opgeslagen server
- Gegevens verwijderen: verwijder al bestaande gegevens van de in de memcache opgeslagen server
Gegevens bewaren
$cache
of klasseobject met memcache heeft een set
methode die een sleutel, waarde en tijd in beslag neemt om de waarde voor (ttl) op te slaan.
$cache->set($key, $value, 0, $ttl);
Hier is $ ttl of time to live de tijd in seconden dat u wilt dat memcache het paar op de server opslaat.
Gegevens verkrijgen
$cache
of klasseobject met memcache heeft een methode get
die een sleutel opneemt en de bijbehorende waarde retourneert.
$value = $cache->get($key);
Als er geen waarde is ingesteld voor de sleutel, wordt deze null geretourneerd
Verwijder data
Soms moet u de cachewaarde verwijderen. $cache
of memcache-instantie heeft een delete
die hiervoor kan worden gebruikt.
$cache->delete($key);
Klein scenario voor caching
Laten we uitgaan van een eenvoudige blog. Het zal meerdere berichten op de bestemmingspagina hebben die bij het laden van de pagina uit de database worden opgehaald. Om de sql-vragen te verminderen kunnen we memcached gebruiken om de berichten in de cache te plaatsen. Hier is een zeer kleine implementatie
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 Gebruik APC Cache
De Alternative PHP Cache (APC) is een gratis en open opcode-cache voor PHP. Het doel is om een gratis, open en robuust framework te bieden voor het cachen en optimaliseren van PHP-tussencode.
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
Cache toevoegen:
apc_add ($key, $value , $ttl);
$key = unique cache key
$value = cache value
$ttl = Time To Live;
Cache verwijderen:
apc_delete($key);
Voorbeeld van cache instellen:
if (apc_exists($key)) {
echo "Key exists: ";
echo apc_fetch($key);
} else {
echo "Key does not exist";
apc_add ($key, $value , $ttl);
}
APC is bijna 5 keer sneller dan Memcached.