Sök…
Anmärkningar
Cache med memcache
Memcache är ett distribuerat objektcachingssystem och använder key-value
för att lagra små data. Innan du börjar ringa Memcache
kod till PHP måste du se till att den är installerad. Det kan göras med metoden class_exists
i php. När det har validerats att modulen är installerad börjar du med att ansluta till memcache-serverinstansen.
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->connect('localhost',11211);
}else {
print "Not connected to cache server";
}
Detta kommer att bekräfta att Memcache php-drivrutiner är installerade och ansluter till memcache-serverinstansen som körs på localhost.
Memcache körs som en demon och kallas memcached
I exemplet ovan har vi bara anslutit till en enda instans, men du kan också ansluta till flera servrar med
if (class_exists('Memcache')) {
$cache = new Memcache();
$cache->addServer('192.168.0.100',11211);
$cache->addServer('192.168.0.101',11211);
}
Observera att i detta fall, till skillnad från anslutning, kommer det inte att finnas någon aktiv anslutning tills du försöker lagra eller hämta ett värde.
Vid caching finns det tre viktiga operationer som måste genomföras
- Lagra data: Lägg till ny data till memcached server
- Hämta data: Hämta data från memcached server
- Radera data: Ta bort redan befintlig data från memcached server
Lagra data
$cache
eller memcached klassobjekt har en set
metod som tar in en nyckel, värde och tid för att spara värdet för (ttl).
$cache->set($key, $value, 0, $ttl);
Här är $ ttl eller tid att leva tid i sekunder som du vill att memcache ska lagra paret på servern.
Hämta data
$cache
eller memcached klassobjekt har en get
metod som tar in en nyckel och returnerar motsvarande värde.
$value = $cache->get($key);
Om det inte finns något värde för nyckeln kommer den att returnera noll
Ta bort data
Ibland kan du behöva ta bort ett cachevärde. $cache
cache- eller memcache-instans har en delete
som kan användas för samma sak.
$cache->delete($key);
Litet scenario för caching
Låt oss anta en enkel blogg. Det kommer att ha flera inlägg på målsidan som hämtas från databasen med varje sidbelastning. För att minska sqlfrågorna kan vi använda memcached för att cache-posta inlägg. Här är en mycket liten implementering
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 med APC-cache
Den alternativa PHP-cachen (APC) är en gratis och öppen opecache-cache för PHP. Dess mål är att tillhandahålla en gratis, öppen och robust ram för caching och optimering av PHP-mellankod.
sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart
Lägg till cache:
apc_add ($key, $value , $ttl);
$key = unique cache key
$value = cache value
$ttl = Time To Live;
Radera cache:
apc_delete($key);
Ställ in cache-exempel:
if (apc_exists($key)) {
echo "Key exists: ";
echo apc_fetch($key);
} else {
echo "Key does not exist";
apc_add ($key, $value , $ttl);
}
APC är nästan fem gånger snabbare än Memcached.