PHP ile MemCached Kullanımı

Etiketler: memcache
PHP ile MemCached Kullanımı
php-ile-memcached-kullanimi

MemCached (http://memcached.org) 2003 yılında LiveJournal (http://livejournal.com/) için yazılmış ve geliştirilmesi devam eden açık kaynak kodlu, yüksek performanslı, dağıtık mimaride çalışabilen bir önbellekleme sunucu sistemidir.

MemCached ile sürekli ihtiyacını olan dizileri, program ayar verilerini, uzun süren MySQL sorgu sonuçlarını önbellekleyerek yazılımınızın çok daha hızlı çalışmasını sağlayabilirsiniz.

MemCached kullanan büyük oyuncular * GittiGidiyor * LiveJournal * Wikipedia * Flickr * Bebo * Twitter * Typepad * Yellowbot * Youtube * Digg * WordPress.com * Craigslist .

MemCached ‘in depolama stili key-value (anahtar kelime – yüklenen değer) şeklindedir. Hafızada durmasını istediğiniz değere bir key tanımlarsınız ve set edersiniz.

Örnek key-value;
key : iller
value : Türkiyedeki tüm il listesi (İstanbul, Ankara, İzmir …)

MemCached TCP/IP üzerinde çalışan sunucudur.
MemCache ise PHP’nin MemCached sunucusuna bağlanan, değer set eden, anlık durum bilgisi gösteren yani MemCached üzerinde işlemler yapan kütüphanesidir.

Kurulumlar :
MemCached sunucuyu yum , apt-get ile kurabilirsiniz.
MemCache kutuphanesini de PECL  ile  kurabilirsiniz. Paket Adı : pecl-memcache
Kurulumları tamamladıktan sonra Apache’yi restart edin, phpinfo() ‘da MemCache kütüphanesini göreceksiniz.

memcache-phpinfo.gif

MemCached Sunucuyu başlatmak (shell’den):
# memcached -d -m 512 -l 127.0.0.1 -p 11211 -u nobody
(d = daemon, m = memory (512MB), u = user, l = IP adresi, p = port)

Artık hazır sayılırız. Bir cache sunucumuz var ve cache sunucusunda işlem yapacağımız bir de kütüphanemiz.


 

memcache_ornek.php
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("MemCached servera baglanilamiyor!");
 
$cachelenecekVeri = "istanbul,ankara,izmir";
 
/*
 * MemCached'e veri gönder.
 * iller = key
 * $cachelenecekVeri = veriler
 * false = 3. parametre sıkıştırma parametresidir, true olduğunda veriler sıkıştırılarak saklanır
 * 100 = 4. parametre saniye olarak cachleme süresidir
 */
$memcache->set('iller', $cachelenecekVeri, false, 100); 
 
/*
 * MemCached'den veri al.
 */
$cachedekiDeger = $memcache->get('iller'); 
 
var_dump($cachedekiDeger);
?>
 

memcache_sql_ornek.php
# MemCached'e baglan
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("MemCached servera baglanilamiyor!");
 
# cache'den veriyi almaya calis
$data = $memcache->get('iller'); 
if ($data === false) {
        # eger donen deger FALSE ise cachede veri yoktur, db'den veriyi al ve cache'e yaz
        echo "data canlıdan geliyor...
"
;
        
        $data = array();
        $SQL = "SELECT ad FROM iller";
        $sorgu = mysql_query($SQL);
        while ($sira = mysql_fetch_object($sorgu)) {
               $data[] = $sira->ad;
        }
 
        # db'den gelen veriyi cache'e yaz , 3600 = 1 saat
        $memcache->set('iller', $data, false, 3600); 
}
else {
        echo "data cacheden geliyor...
"
;
}
 
print_r($data);
?>

 

Dikkat Edilmesi gerekenler :

* Memcache bir cache sistemidir. Verilerinizin kaybolabilir.
* Memcache’de key (anahtar kelime) en fazla 250 karakter olabilir.
* Cache’lenen veri en fazla 1MB olabilir. 1MB üzerinde veri saklayacaksanız sıkıştırma parametresini “true” yapın.
* Memcache’de cache için ayrılan alan hiçbir zaman dolmaz. Eğer sürekli veri set ediyorsanız ve yer kalmadı ise otomatik olarak en eski verinin üzerine yazılacaktır (LRU).
* x86 ve x86_64 farkı:  x86 mimaride cache için ram’de en fazla 4GB ayırabilirsiniz (memcached’de –m parametresi).  x86_64 mimaride 16.8 milyon terabytes’a kadar desteklemektedir.

Linkler :
http://www.php.net/memcache
http://memcached.org/
http://en.wikipedia.org/wiki/Memcached

Tartışma

PHP extension tarafında Memcached için memcache'ten ziyade memcached kurulup kullanmakta fayda var. memcache ve memcached diye iki ayrı php-client'ı mevcut. Bunlarda memcached daha hızlı ve daha fonksiyonel. memcached php-client'ının memcache ten tek farkı KEY leri GET/SET ederken yanlış yazımları otomatik düzeltmesidir. Memcached php-client ını PECL üzerinden edinebilirsiniz.



ya da
CAPTCHA Images