Memcache nedir ve PHP’de Memcache kullanımı

Merhaba Arkadaşlar; Memcache Nedir Temel Kullanım Alanları Nelerdir Bende Bilmiyordum Ama Bir Kaç Kaynak Siteden Edinebildiğim Bilgileride Bu Sayfada Bir Başlıkta Toplamak İstedim Belki Faydalı Olabilirim Diye.

Memcache Nedir?

Memcache, yüksek trafikli web sitelerinin sıklıkla başvurduğu tampon bellek kullanma sisteminin adıdır. Facebook yazılım mühendisleri tarafından geliştirilmeye devam ediliyor. Şu an dünya ölçeğinde Memcache en etkin kullanan web sitesi doğal olarak facebook’tur.

Memcache Neden kullanılıyor?

Bu sorunun en az 2 cevabı var diyebiliriz:

1- Ram fiyatları, işlemci fiyatlarından daha ucuzdur. (Sunucu yükünü azaltmak için)

2- Ram bellekler, hardisklerden daha hızlı veri okurlar. (Performans için)

Herkes Memcache kullanabilir mi?

Share hosting’de barındırılan bir siteniz varsa %99 paylaşımlı sunucu hizmetini aldığınız yer sunucuya Memcache modülünü kurmamıştır.

Share Hosting Paketlerinde Neden Memcache Modülü kurmuyorlar?

Memcache Ram bellek üzerinde işlem yapar. Eğer hosting firması share hosting sunucusuna kurarsa, kodlama konusunda acemi bir müşteri

sunucu Ram belleklerinin anasını ağlatabilir. Diğer müşteriler mağdur olurlar. Risk almak istemedikleri için share hosting hizmeti aldığınız yerde Memcache kurulu değildir.

Kendime ait Sunucum var Memcache kurmalı mıyım?

Yüksek hit alan siteniz var, CPU kullanımınız yüksek ise, sayfanız daha hızlı açılsın istiyorsanız kesinlikle kurmalısınız.

Memcache Nasıl kurulur.

İnsanlar linux’un daha iyi olduğunu bilir ama uygulamalarını Windows ortamında geliştirir” felsefesine katılan biri olarak, Windows 7 işletim sistemi yüklü bilgisayarınıza nasıl kurulum yapılacağını kısaca anlatmak istiyorum. Yazdığınız uygulamayı memcache ile entegreyi localhostunuzda tamamlayın, sunucunuza zaten hosting firması kurulum yapar.

indirmemiz gereken 2 dosya var.

1.ci dosyamız php extension için gerekli olan dll dosyası.

Eğer bilgisayarınızda php 5.3.x varsa buradan

Eğer bilgisayarınızda php 5.2.x varsa özellikle appserv vs kullananlar için dll dosyası buradan

2.ci Memcached.exe dosyası buradan

Memcached.rar dosyasını c:\memcached\ klasörüne açın.

c:\memcached klasörünün içinde Shift + sağ click mouse yapıp açılan menüden komut penceresini burada aç bölümünü seçelim. (cmd.exe açmanın kısayolu)

Önce şu kodu:

 memcached.exe -d install 

Sonra şu komutu yazın:

 memcached.exe -d start 

Sonraki işlem adımımız:

indirdiğimiz dll dosyasını php extension klasörüne kopyalamak. Appserv kullananlar için:
D:\AppServ\php5\ext\ yada siz nereye kurduysanız içine kopyalayın.
Daha sonra C:\WINDOWS\php.ini dosyasına extension=php_memcache.dll satırı varsa önündeki noktalı virgülü kaldırın.
extension=php_memcache.dll satırı yoksa bunu ekleyin.

Apache reboot edince kurulum tamamlanmış olacaktır. Bilgisayarı reboot ederseniz daha iyi olur tabii.

Artık uygulamaya geçebiliriz.
Php’nin Memcache komutları gözünüzde büyüttüğünüz kadar zor degil. Php’nin memcache ile alakalı 19 parametresi var ama bize lazım olan
5 parametresi yada şöyle diyeyim bu 5 parametre her işimizi görüyor. Hatta 4 diyelim. Bu 4 parametre ile çok güzel işler çıkartabiliriz.
Bilmemiz gereken parametreler:
1-connect () //memcache sunucusuna bağlanmaya yarar
2- set() // Ram belleğe veri yazmaya yarar
3-get() //Ram bellekteki veriyi okumaya yarar.
4-flush() // işi biten tüm veriyi sildirir.
5-close() // bunu kullanmamakta hata vermez ama yinede bilmek gerekli.

Hangi parametre Ne işe yarar örneklendirelim.
<?
$bellek=new Memcache;
$bellek->connect(“127.0.0.1”,11211);
?>


Bu örnek tüm Memcache komutlarını öğreten en basit örnek.


<? $bellek=new Memcache; $bellek->connect("127.0.0.1",11211);
$dizi=array('ali','veli','deli','selim');
$bellek->set("isim",$dizi,0,10);
$yeni= $bellek->get("isim");
$bellek->close();
print_r($yeni);
?>

Kod açıklaması:
Set() komutu ile dizi değişkenimizin tamamını isim şeklinde paketleyip ram belleğe gönderiyoruz. 0 parametresi veri sıkıştırılsın mı parametresidir. 1 yaparsanız zlip kütüphanesi ile sıkıştırılır. 10 parametresi Ram bellekte kaç saniye kalacağını gösterir.
get() komutu ile ram bellekten verimizi çağırıyoruz.
close() parametresi ile memcache bağlantısını kapatıyoruz.

Memcache kullanımı bu kadar basittir. Asıl performansını mysql sorgularında verir. Onu da basit bir örnek ile açıklayayım.


$sorgu = mysql_query("SELECT * FROM makaleler ");
$sonuc = mysql_fetch_array($sorgu);
$bellek->set("isim",$sonuc,0,600);
$yeni= $bellek->get("isim");
$bellek->close();
print_r($yeni);

Bu şekilde bir kod yapısı ile sitenize gelen her ziyaretçi için mysql_query oluşturulmaz. Veriler sizin belirlediğiniz zaman dilimi boyunca ram’dan okunup ziyaretçiye gönderilir. CPU kullanımınız yarı yarıya düşer.


<? $bellek=new Memcache; $bellek->connect("127.0.0.1",11211);
$yeni= $bellek->get("isim");

if($yeni)
{
echo "Sorgu sonucu ram bellekten okundu";
}
else {
mysql_connect( "localhost", "root", "root" ) ;

mysql_select_db('makaleler');
$sorgu = mysql_query("SELECT * FROM makaleler ");

$sonuc = mysql_fetch_array($sorgu);

$bellek->set("isim",$sonuc,0,600);
}
?>

 

Şimdide Farklı Bir Kurulum Yapımını Anlatalım Belki İşine Yarayan Arkadaşlarımız Olur.

Gelelim sunucu tarafında memcached desteğini nasıl sağlayacağımıza.öncelikle memcache çalışması için 3 modüle ihtiyaç duyar.
1- libevent
2- memcached
3- memcache

Libevent:bir dosya tanımlayıcısı(Bir dosya tanımlayıcı basitçe söylemek gerekirse açık bir dosya ile ilişkilendirilmiş bir tamsayıdır.) üzerinde bir durumun gerçekleştiğinde ya da herhangi bir zaman aşımı olduğunda çalışması için geri çağrılan işlevleri çalıştırmayı sağlayan bir kütüphanedir.

Kısa bilgilerden sonra kurulum ayrıntılarına geçebiliriz; aşağıdaki kodları aynen kopyala yapıştır yaparak kullanabilirsiniz. Kurulum 64 bitlik centos 5.7 üzerinde gerçekleştirilmiştir. Ayrıca PHP ve Apache Kurulu olduğu varsayılmıştır.

/data/download/memcache dizinini oluşturup gerekli dosyalarımızı indiriyoruz.

#mkdir /data/download/memcache
# cd /data/download/memcache

#wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

#wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz

#wget http://pecl.php.net/get/memcache

1) libevent kurulum ve ayarlarını yapıyoruz.

#tar xvzf  libevent-2.0.21-stable.tar.gz
#cd /data/download/memcache/libevent-2.0.21-stable
# ./configure
 (c compiler kurulu değilse kuruyoruz. yum install gcc-c++.x86_64 )
#make
#make install

Libevent Kurulum dizinini linkliyoruz.

#ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

32 bit kullananlar aşağıdaki komutu uygulamalılar

#ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

2)Memcached Kurulum ve Derlemesine Geçiyoruz

#cd /data/download/memcache

 #tar xvzf memcached-1.4.15.tar.gz

 #cd /data/download/memcached-1.4.15

 #./configure –with-libevent=/usr/local/lib/libevent-2.0.so.5

 #make

 #make install

3)Memcache Kurulum ve Derlemesini Yapıyoruz.

#cd /data/download/memcache

#tar xvzf memcache-2.2.7.tgz

#cd /root/mcache/memcache-2.2.7

#phpize –> enter (otomatik memcahe derlemeyi sagliyor)

 *phpize: Bir PHP eklentisini derleme işlemine hazırlamak için phpize komutu kullanılır. Aşağıdaki örnekte, eklentinin kaynak kod paketinin eklenti dizininde bulunduğu varsayılmıştır:eklenti burda memcache-2.2.7dir

Eğer sisteminizde phpize komutu yoksa;

yum install php-devel komutu ile kurabiliriz.

Komutun kullanım bilgilerini görmek için phpize –help komutunu verin.

yukarda çalıştırdığımız komutların ardından ekranda aşağıdaki gibi bir çıktı gelmesi gerekiyor.;

PHP Api Version: 20041225

Zend Module Api No: 20060613

Zend Extension Api No: 220060519

Eğer hata alırsanız aşağıdaki komutla phpize yolumuzu buluyoruz ve çıktıyı uyguluyoruz.Örnek çıktı aşağıdaki gibidir.

#which phpize

çıktı bu şekilde olabilir, çıktıyı aynen uyguluyoruz.

/usr/local/bin/phpize

Sonrasında derlemeye devam ediyoruz.

# ./configure –with-php-config=/usr/local/php5/bin/php-config

# make

# make install

Yukardaki adımları doğru uyguladıysak aşağıdaki gibi bir çıktı verecektir.

Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20090626/ Bu çıktı daha sonrasında bizi lazım olcak not edelim.

Başarılı bir kurulum sonucunda eklenti PHP eklentileri dizinine eklenti.so adıyla yerleştirilir. Eklentiyi etkin kılmak için php.ini dosyanıza bir extension=eklenti.so satırı eklemeniz gerekecektir

Sıra geldi memcache’i çalıştırmaya;

# /usr/local/bin/memcached -u root -m 1024 -l 127.0.0.0 -p 11211 -d -c 2048

Yukarıdaki satır memcacehd i 1024Mb bellek ile 127.0.0.0 ip adresi üzerinde 11211 numaralı portta max 2048 connection ve daemon olarak memcached çalıştır demek. Diğer memcached options için;

#man memcached komutunu kullanabiliriz.

Memcached’ın çalışıp çalışmadığını kontrol edelim;

# ps -ef | grep memcache

Doğru çıktı aşağıdaki gibi olmalıdır.

root 11457 1 0 18:05 ? 00:00:00 /usr/local/bin/memcached -u root -m 1024 -l 127.0.0.0 -p 11211 -d -c 2048
root 11464 11335 0 18:05 pts/2 00:00:00 grep memcached

Buraya kadar olan işlemlerde gerekli modüllerimizi kurduk derledik ve memcached’ı aktif hale getirdik. Şimdi yukarıda’da bahsettiğimiz eklentiyi aktif  hale getirmek için php.ini dosyamızı açıp gerekli tanımları yapıyoruz.

# vim /etc/php.ini

php.ini içerisinde extensions_dir satırını bulup az önce not ettiğimiz kod ile değiştiriyoruz.değişiklik sonrası hali aşağıdaki gibi olacaktır.

extension_dir = “/usr/local/lib/php/extensions/no-debug-non-zts-20090626/”

yine php.ini dosyasının en altına aşağıdaki kodları ekliyoruz.

extension = “memcache.so”

dosyamızı esc:wq! tuş kombinasyonlarıyla kaydedip apache’mizi restart ediyoruz.

service httpd restart

Son olarak her reboot ta memcached in otomatik çalıştırılması için rc.local dosyamızın en altına aşağıdaki satırı ekliyoruz.

vi /etc/rc.local

/usr/local/bin/memcached -u root -m 1024 -l 127.0.0.0 -p 11211 -d -c 2048

Serverımız yeniden başladığında memcached otomatik olarak çalışıcaktır.

[root@—- ~]# ps -ef | grep memcache

root 2860 7218 0 18:07 pts/0 00:00:00 grep memcache
root 4989 1 1 Mar15 ? 13:06:51 /usr/local/bin/memcached -u root -p 11211 -m 8192 -d -c 60000

Memcache’in telnet üzerinden kullanımı ile ilgili faydalı olabileceğini düşündüğüm bazı örnekler vereceğim.

çıktının açıklamasını yukarıda belirttiğimiz yazıdan öğrenebilirsiniz.

eğer memcache çalışmıyor ise konsoldan

[root@—— ~]#/usr/local/bin/memcached -u root -p 11211 -m 8192 -d -c 60000

komutunu yazarak çalıştırabiliriz.

şimdi sıra telnet üzerinden memcache istatistiklerini öğrenmeye tekrar komut satırından;

[root@—- ~]#telnet localhost 11211 

komutunu çalıştırarak memcache bağlantısı kurduk.

[root@—— ~]# telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.

<komut>

bağlandıktan sonra komut satırında desteklenen Komutlar aşağıdaki gibi;

memcache

Bir Başka Konuda Buluşmak Üzere Kendinize İyi bakın 😉

İsmet AKÇAKAYA

"Herkes kalender sayar bizi ama benim meşrebim zordur. Toprağım kıraç yerden alınmıştır, her bitki büyümez üzerimde,suyum ekşimiş şarap gibi tatsızdır, soluğum yalçın kayaları parçalayan rüzgarlar gibi delidir. Umuttan çok kuşku vardır yüreğimde, hoşgörüden çok öfke vardır, nedensiz düşmanlık gütmesemde olur olmaz şeye sevgi beslemem ben. Haktan yanayımdır ve de hakikatten. Bu yüzden sevginin hak edenin hakkı olduğuna inanırım. Hak etmeyene sunulmayacak kadar değerlidir sevgi."

Bunlar da hoşunuza gidebilir...

  • Hocam gerçekten çok açıklayıcı açıklama olmuş.Teşekkürler

  • Faydalandım, teşekkür ederim

  • Mehmed Fatih Temiz

    Gayet başarılı bir anlatım olmuş. Tebrik ederim.