Selco Cod
Selco Cod

Yazılım ve güvenlik üzerine makaleler yazan günümüz teknolojisini yakından takip eden sıradan birisi...

Twitter


PHP'de MemCached(MemCache) Kurulumu ve Kullanımı

MemCached, 2003 yilinda Danga tarafindan LiveJournal icin yazilmis ve halen gelistirilmekte olan acik kaynak, yüksek performansli sunucu önbellekleme sistemidir. Daha önceki yazilarimda XCache'den bahsetmistim. Bu konuda XCache bence cok iyi ama bunu da tanitmadan gecemedim. Memcached de ayni XCache gibi ihtiyaciniz olan dizi, uzun süren mySQL datasini önbellekleyerek daha hizli calismasini saglayan bir sistemdir. Bu sistemi neredeyse bilinen büyük sitelerin yarisindan fazlasi kullanmaktadir. Wikipedia , Flickr, Twitter, Youtube bunlardan sadece bir kacidir. Memcached, XCache gibi anahtar ve key sistemi seklinde calismaktadir. Bu yazimiz da görecegimiz basliklar ise sunlardir; 1. MemCached Kurulumu 2. Anahtar Belirleme 3. Belirli Anahtara Ulasma Bu basliklarimizi tek tek inceleyip nasil olduklarini görecegiz. Dip Not: MemCached, TCP/IP üzerinde çalışan bir sunucudur ve kullanilmasindaki amac ise birbirleriyle calisan hibrit sistemlerin ortak session bilgisi kullanmaktir. Örnek olarak Java ile yazilmis bir uygulamadaki cache edilen bir veriyi PHP de okuyabiliriz. MemCache ise MemCached sunucuna baglanan ve anlik olarak degerleri gösterebilen sunucu üstünde islem yapabilen bir kütüphanedir.

1. MemCached Kurulumu

MemCached MemCached kurulumunu linux ve windows platformlari icin kurulumlari söyledir. Linux icin Kurulum
apt-get install memcached
ve yahut isterseniz PECL ile de kurabilirsiniz.
pecl install memcache
Yüklenen sunucuyu baslatmak icin ise su kodu calistirin.
memcached -d -m 512 -l 127.0.0.1 -p 11211 -u nobody
Windows icin Kurulum Bu adresteki sürümü C sürüsünde memcached dizinine yükleyin ve CMD den su komutu calistirin.
c:/memcached/memcached.exe  -d install
Yüklenen sunucuyu baslatmak icin ise su kodu calistirin.
c:/memcached/memcached.exe -d  start

2. Anahtar Belirleme

<?php
# PDO, mySQL Baglantisi
try {
    $db = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pass');
} catch (PDOException $e) {
    echo 'Baglanti Hatasi: ' . $e->getMessage();
}

# MemCache ile MemCached Sunucusuna Baglan
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Sunucuya Baglanilamiyor...");

# Üyeler tablosuna baglanip statu 1 olanlari listesini aliyoruz
$uyeler = $db->prepare('SELECT * FROM uyeler WHERE statu = :statu');
$uyeler->bindValue(':statu', 1, PDO::PARAM_INT); 
$uyeler->execute();
$uyeler->fetchAll(PDO::FETCH_OBJ);

# Bos bir dizi olusturuyoruz
$veriDizisi = [];

foreach ($uyeler as $uye)
{
	# Üyelerin kullanici adini döngüde diziye ekliyoruz
	$veriDizisi[] = $uye->kullaniciAdi;
}

# MemCache ile Anahtar Belirliyoruz.
# 1800 sn bazindadir ve 30 dk ya denk gelmektedir.
$memcache->set('uyeKullaniciAdlari', $veriDizisi, false, 1800);
?>

3. Belirli Anahtara Ulasma

<?php
# PDO, mySQL Baglantisi
try {
    $db = new PDO('mysql:host=localhost;dbname=dbname', 'user', 'pass');
} catch (PDOException $e) {
    echo 'Baglanti Hatasi: ' . $e->getMessage();
}

# MemCache ile MemCached Sunucusuna Baglan
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Sunucuya Baglanilamiyor...");

# Olusturulan Anahtara Ulasma
$uyeKullaniciAdlari = $memcache->get('uyeKullaniciAdlari');

# Anahtar gecerli mi bakalim
if ( $uyeKullaniciAdlari === TRUE )
{
	print_r($uyeKullaniciAdlari);
} else {
	# Yok ise kullanicilar tanimlamasini tekrar yapalim.
	
	# Üyeler tablosuna baglanip statu 1 olanlari listesini aliyoruz
	$uyeler = $db->prepare('SELECT * FROM uyeler WHERE statu = :statu');
	$uyeler->bindValue(':statu', 1, PDO::PARAM_INT); 
	$uyeler->execute();
	$uyeler->fetchAll(PDO::FETCH_OBJ);

	# Bos bir dizi olusturuyoruz
	$veriDizisi = [];

	foreach ($uyeler as $uye)
	{
		# Üyelerin kullanici adini döngüde diziye ekliyoruz
		$veriDizisi[] = $uye->kullaniciAdi;
	}

	# MemCache ile Anahtar Belirliyoruz.
	# 1800 sn bazindadir ve 30 dk ya denk gelmektedir.
	$memcache->set('uyeKullaniciAdlari', $veriDizisi, false, 1800);
}
?>
Ek Not: MemCached sunucunda en fazla veri saklama boyutu 1 MB'dir. Bundan ötürü cok büyük bir veri önbellege alinacak ise set edilirken FALSE degeri TRUE olmalidir.


Yazı Hakkında Yorumlar