22

Ağustos
2011

Memcached ve PHP

Yazar: Nurettin TOPAL  |  Kategori: Genel, Yazılım  |  Yorum: 2  |  

Web uygulamalarında performans çok önemli bir unsur haline geldi. Uygulamalarımızda insanların ihtiyaçlarını iyi bir şekilde karşılıyor olmak yetmiyor, bunları hızlı bir şekilde sunmak lazım. Bunun için uygulanabilecek çözümlerden birisi de Memcached kullanımı.

Nedir bu Memcached?

Danga Interactive tarafından kendi uygulamaları olan LiveJournal’da kullanılmak üzere geliştirilmiş bir teknolojidir. Fakat daha sonra herkesin kullanımına sunulmuş. Bu teknoloji YouTube, Reddit, Zynga, Facebook ve Twitter gibi popüler web uygulamarı tarafından kullanılmaktadır.

Verilerimizin Ram üzerinde tutularak çok hızlı bir şekilde erişilmesini sağlar. Burda dikkat edilmesi gereken nokta ise; verilerin Ram üzerinde tutulması nedeni ile sunucunun yeniden başlatılması ya da kapatılması durumunda Ram üzerinden silineceğidir. Yani Memcached bizim için verilerin tutulduğu asıl yer değil, veri tabanında yer alan verilere hızlı bir şekilde ulaşılması için geçici olarak tutulduğu bir yerdir.

Bize Ne Sunuyor?

Bir örnekle bunu açıklarsak sanırım çok daha iyi olacaktır.

Yoğun trafiği olan bir web uygulamamız olduğunu düşünelim. Günde binlerce isteğin yapıldığı bir veri tabanında; anlık 10 istek ile 10.000 isteğe aynı sürede cevap verilemeyeceğini tahmin etmek çok zor değil. Veri tabanının yoğun istek altında olduğu zamanlarda da isteklere hızlıca bir cevap verebilmesi için yapılabilecek farklı farklı çözümler olsa da bu yazıda Memcached kullanarak bu performans kaybını ortadan kaldırıp, daha da performanslı bir şekilde çalışması için yapılması gerekenleri ele alacağız.

Yukarıdaki görselden de göreceğiniz üzere, veritabanı gibi kullanabileceğimiz ama asıl işi farklı olan bir memcached sunucusu ile çok sık kullandığımız ama sürekli değişmeyen verilerimizi Memcached üzerinde tutarak hem veritabanında oluşturduğu yükü ortadan kaldırmış oluyoruz hem de bu verilere daha hızlı bir şekilde ulaşmış oluyoruz.

Nerelerde Memcached Kullanmalıyız?

Projenin içeriğine göre değişmekle beraber; çok sık güncellenmeyen ama sürekli kullanılan bilgiler Memcached üzerinde tutulabilir. Çoklu dil desteği sağlıyorsanız; dil verileri tutulabilir, kullanıcı yetkilendirme verileri tutulabilir, yardım ve sıkça sorulan sorular sayfaları verileri… bu şekilde sıralayabiliriz.

Memcached PHP İle Nasıl Kullanılır?

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die("Could not connect");

// connect to DB
include('includes/connect.php');

//set the key then check the cache
$key = md5("SELECT * FROM memcached_test where name='deneme'");
$get_result = $memcache->get($key);
if ($get_result) {
    echo $get_result['name'];
    echo $get_result['username'];
    echo "Data Pulled From Cache";
}
else {
    // Run the query and get the data from the database then cache it
    $query  = "SELECT * FROM memcached_test where name='deneme';";
    $result = mysql_query($query);
    $row    = mysql_fetch_array($result);
   
    echo "<pre>";
    print_r($row);
    echo "</pre>";
   
    $memcache->set($key, $row, TRUE, 20); // Store the result of the query for 20 seconds
   
    echo "Data Pulled from the Database";
}

Bizim yukarıdaki kod parçacığı ile yapmış olduğumuz; memcached_test tablosundaki name alanı test olan kaydı Memcached’e yazarak 1000 sn boyunca bu datanın Memcached’ten kullanılmasını sağlamak. 1000 sn sonra ise; veritabanından güncel veriyi Memcached’e tekrar yazarak Memcached üzerindeki verinin güncelliğini korumuş oluyoruz.

Memcached üzerinde veriler, key – value şeklinde tutulmaktadır. set ve get metodlarını kullanarak Memcached üzerine veriyi yazıyoruz ve daha sonra da çekiyoruz.

$memcache->get($key); ile o key’e ait value elde edilir.
$memcache->set($key, $data, TRUE, 1000); ile verilen key için data değeri set edilir.

Bunlar Memcached için temel bilgiler. Bu bilgileri kullanarak siz de kendi projelerinizde ihtiyacınız olan kısımlarda verileri Memcached üzerinde tutarak performans artışı sağlayabilirsiniz.

Etiketler:

yorumlar:

2 Yorum Yapılmış!

    İbrahim Gündüz

    Ağu 22, 2011

    Oldukça yararlı ve açıklayıcı bir makale olmuş. Tebrik ederim.

    Nurettin TOPAL

    Ağu 23, 2011

    Teşekkürler İbrahim. Temel olarak Memcached ve kullanımı ile ilgili olarak yüzeysel bir bilgi verdim. İleri düzey kullanımı ile ilgili olarak ileriki günlerde yeni bir yazı paylaşmayı düşünüyorum.

yorum yapmak ister misin?

Facebook FriendFeed Twitter RSS Beslemesi Flickr Linkedin foursquare
reklamlar

sponsor reklamlar

Çay Haber - Yöresel Haberi NET Adresi SameUrl - URL Shortening Service Mutlu Gelin 125x125 Reklam

© Tüm Hakları Saklıdır - Nurettin TOPAL
Yazılar kaynak belirtilmeden kullanılamaz.

Wordpress alexa bilgilerim Website Detay