Ne Öğreneceğim?
- Memcache
- Memcache Kurulumu
- Memcache Kullanımı
Gereksinimler
- PHP 5.4 ve üzeri
- Linux İşletim Sistemi
Zorluk
- Orta Düzey
Eğitim İçeriği
Büyük çaplı projelerde veritabanı trafiği oldukça yoğundur. Bu durumda performansı artırmak için veritabanı ile PHP kodu arasındaki trafiği en az seviyeye indirmek için sorgu sonuçları önbelleğe alınır. Sonuçlar belli süre önbellekte (RAM bellekte) tutulur ve böylece veritabanı rahatlatırılır.
Bu yazımda performans olarak oldukça başarılı olan Memcache'yi inceleyeceğiz.
Öncelikle Memcache hakkında bilmenizi istediğim bazı noktalara değineceğim.
- Önbellek üzerinde gerçekleştirilen değişiklikler veritabanına yansıtılmaz.
- Daha önceden verilerinizi önbelleğe aldınız ve veritabanında değişiklik yaptınız. Önbellekte depolanan veriler silinmedikçe veritabanındaki yeni değerler görüntülenemez.
- Sonuçların önbelleğe alınmasındaki başlıca nedenler hız ve veritabanı trafiğinin azaltılmasıdır.
- Varsayılan ayarları değiştirilmediği sürece Memcache ile en fazla 1MB büyüklüğünde veriyi önbeleğe alabilirsiniz. Daha yüksek boyutlardaki veriler otomatik olarak kırpılır.
- Önbelleğe alınan veri için bir takma isim tanımlanır. Belirtilen takma isim en fazla 250 karakterden oluşmalıdır. Genellikle veritabanı sorgularında SQL sözcüğü md5() fonksiyonu ile şifrelenerek anahtar kelime olarak kullanılır.
Nerelerde Kullanılır?
Genellikle büyük çaplı ve veritabanından yoğun bilgi sorgulama gerektiren projelerde kullanılır. Bunun aksine, yazılımcının tercihine bağlı olarak her türlü projede kullanılabilir. Fakat sakınılması gereken önemli bir nokta var. Veritabanı üzerinde sıklıkla değişikliklerin yapıldığı bölümlerde önbellek işleminin kullanılması hatalı sonuçların görüntülenmesine neden olabilir. Bu nedenle, yoğun güncelleme gerektirmeyen bölümlerde kullanılması tavsiye edilir.
Kurulum
PHP destekleyen herhangi bir üçüncü parti yazılım kullandığınızda hazır olarak paket içeriğinde Memcache sunucusu yer almaz. Birkaç adımda Memcache sunucusunu kurabilirsiniz.
Linux işletim sistemlerinde Memcache eklentisini kurmak oldukça basittir. Paket kurulumu ve PHP diline Memcache desteğini vermek için aşağıdaki komutları kullanabilirsiniz.
sudo apt-get install memcached
#Ubuntu
sudo emerge install memcached
#Gentoo
sudo yum install memcached
#Redhat
sudo apt-get install php5-memcache
#PHP için aktivasyon
Verileri Önbelleğe Alma
Önbelleğe yeni bir veri eklemek için set() metodu kullanılır. Metodun prototipi aşağıda yer almaktadır.
<?php
bool Memcache::set(string $isim, mixed $deger[,int $bayrak[,int $zaman]])
?>
Metodun yazım şeklinden de anlaşılacağı üzere en az 2, en çok 4 parametre ile birlikte kullanılır.
Tanımlamanın ardından bir verinin Memcache ile nasıl depolanacağını örneklendirelim. Aşağıdaki örnekte Memcache sunucusuna bağlantı sağladıktan sonra, verinin önbelleğe nasıl alınacağı yer almaktadır.
<php
#Sunucu bağlanılıyor...
$bellek = new Memcache;
$bellek->connect ("127.0.0.1", 11211);
#Veri, şehirler ismiyle önbelleğe alınıyo
$degisken = array ('ankara', 'bursa', 'izmir', 'istanbul');
$bellek->set("sehirler", $degisken, 0, 60);
?>
Yukarıdaki örnekte dizi tipindeki değişken değeri önbelleğe alınıyor. Dilerseniz metin , tamsayı veya object türdeki değerler de önbelleğe alınabilir. Burada dikkat edilmesi gereken nokta, veri önbelleğe hangi isimde alındığı ve ne kadar süre önbellekte tutulduğudur. Yukarıdaki örnekte yer alan $degisken isimli veri, sehirler ismi be 60 saniye süre ile önbelleğe alınmıştır. Üçüncü parametredeki değer sıfır (0) olduğundan dolayı, önbelleğe alınan veriler için sıkıştırma işlemi uygulanmamıştır.
Önbellekten Okuma
Verileri önbelleğe alırken birinci parametresinde hangi isim ile önbelleğe tutulduğunu belirtiyorduk. Önbelleğe alınırken kullanılan isim ile veriler önbellekten okunur. Bu işlem için Memcache sınıfının üyesi olan get() metodu kullanılır. Bu metot, yalnızca önbellekten okunacak verinin takma ismini parametre olarak alır.
<php
#Sunucu bağlanılıyor...
$bellek = new Memcache;
$bellek->connect ("127.0.0.1", 11211);
#Veri, "uye" ismiyle önbelleğe alınıyor.
$bellek->set("uye", "Sedat", 0, 60);
#Önbellekte bulunan "uye" isimli değer okunuyor.
echo $bellek->get("uye");
?>
Yukarıdaki örnek çalıştırıldığında ekrana Sedat değerini yazdıracaktır. Eğer get() metoduna girilen takma isim değerine ait bir veri önbellekte bulunamaz ise, geriye FALSE değerinin döndürür. Daha önceden uye isimiyle önbelleğe bir değer atadığımız için FALSE değeri yerine, önbellekte olan değer döndürüldü.
Önbelleği Boşaltma
Önbelleğe alınmış tüm verileri temizlemek için flush() metodu kullanılır. Bu metot çağırıldığında önbellekte depolanan tüm veriler kalıcı olarak temizlenir.
<?php
$bellek->flush();
?>
Önbellekten Veri Silme
Bazen önbellekten tüm verileri silmek yerine takma ismini bildiğimiz bir veriyi silme ihtiyacı duyabilir. Bu durumda Memcache sınıfının bir üyesi olan delete() metodu kullanılır. Bu metoda hangi isimdeki veri silinecek ise parametre olarak girilir ve metot çağırılır.
<php
#Sunucu bağlanılıyor...
$bellek = new Memcache;
$bellek->connect ("127.0.0.1", 11211);
#Veri, "uye" ismiyle önbelleğe alınıyor.
$bellek->set("isim", "Sedat", 0, 10);
#Önbellekte bulunan "uye" isimli değer siliniyor.
$bellek->delete("isim");
#Önbellekte "uye" isimli değer silindi, FALSE dönecek.
echo $bellek->get("isim");
?>
Yukarıdaki örnekte yer alan komutlar çalıştırıldığında, bir miktar veri uye ismi ile önbelleğe alınıyor. Hemen ardından önbelleğe alınan uye* isimli değer ekrana yazdırılıyor. Önbellekte uye isminde bir veri olmadığı için geriye FALSE değeri döndürülecek ve ekrana herhangi bir değer basılmayacaktır.
Katkılarından dolayı Sercan Çakır'a teşekkürler.
Posted on Utopian.io - Rewarding Open Source Contributors
Thank you for the contribution. It has been approved.
You can contact us on Discord.
[utopian-moderator]
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hey @sedatyildiz I am @utopian-io. I have just upvoted you!
Achievements
Suggestions
Get Noticed!
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit