25 Temmuz 2019 Perşembe

PHP ile Memcache Kullanımı

Merhaba Webkolog takipçileri!

Bugün sizlere web uygulamalarınızın performansını artırmak ve veritabanı yükünü azaltmak için harika bir araçtan bahsedeceğim: Memcache. Özellikle yoğun trafiğe sahip sitelerde veritabanından sürekli veri çekmek, hem sunucu kaynaklarını tüketir hem de sayfa yükleme sürelerini uzatır. İşte tam bu noktada Memcache, veritabanı sonuçlarını önbelleğe alarak imdadımıza yetişiyor.

Neden Memcache Kullanmalıyız?

En temel sebebi hız ve veritabanı trafiğini azaltmaktır. Sıkça erişilen verileri bellekte tutarak, her seferinde veritabanına sorgu göndermek yerine çok daha hızlı bir şekilde bu verilere ulaşabiliriz. Memcache, varsayılan olarak en fazla 1MB veriyi önbelleğe alır. Daha büyük veriler otomatik olarak kırpılır. Önbelleğe alınan her veri için bir takma isim tanımlanır ve bu takma isim en fazla 250 karakterden oluşabilir.


Memcache Kurulumu
Linux İçin Kurulum

Linux tabanlı sistemlerde Memcached kurulumu oldukça basittir. Kullandığınız dağıtıma göre aşağıdaki komutları kullanabilirsiniz:

  • Ubuntu için: sudo apt-get install memcached
  • Gentoo için: sudo emerge install memcached
  • Redhat için: sudo yum install memcached

Memcached sunucusunu kurduktan sonra PHP için Memcache eklentisini aktif etmemiz gerekiyor:

sudo apt-get install php5-memcache
Windows İçin Kurulum

Windows üzerinde Memcache kurulumu biraz daha farklıdır:

  1. Öncelikle Memcache'in PHP eklentisini indirmeniz gerekiyor. Güncel sürümleri pecl.php.net/package/memcache adresinden bulabilirsiniz.
  2. İndirdiğiniz zip dosyasından php_memcache.dll dosyasını PHP kurulumunuzdaki ext dizinine (örneğin C:/AppServ/php5/ext) kopyalayın.
  3. Modülü etkinleştirmek için php.ini dosyanızı açın ve aşağıdaki satırı ekleyin:
    extension = php_memcache.dll
    
  4. Ardından Memcached sunucusunu indirmeniz gerekiyor. Bu adresten indirebilirsiniz.
  5. İndirdiğiniz dosyaları C:/memcached gibi bir dizine çıkartın.
  6. Komut İstemi'ni (CMD) yönetici olarak açın ve aşağıdaki komutları sırasıyla girin:
    c:/memcached/memcached.exe -d install
    C:/memcached/memcached.exe -d start
    
    Bu komutlar Memcached servisini kurup başlatacaktır.
  7. Son olarak Apache veya kullandığınız web sunucusunu yeniden başlatmanız gerekiyor.

PHP ile Memcache Kullanımı

Memcache'i PHP uygulamalarınızda kullanmak için temel fonksiyonları bilmeniz yeterli. İşte sıkça kullanılan Memcache fonksiyonları ve parametreleri:

Temel Fonksiyonlar
  • bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] ): Yeni bir veriyi önbelleğe eklemek veya mevcut bir veriyi güncellemek için kullanılır.
  • bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] ): Belirtilen anahtara sahip bir veri yoksa ekler. Eğer varsa false döner.
  • bool Memcache::replace ( string $key , mixed $var [, int $flag [, int $expire ]] ): Mevcut bir veriyi güncellemek için kullanılır. Belirtilen anahtara sahip bir veri yoksa false döner.
  • string Memcache::get ( string $key [, int &$flags ] ) veya array Memcache::get ( array $keys [, array &$flags ] ): Önbellekten veri okumak için kullanılır.
  • bool Memcache::delete ( string $key [, int $timeout = 0 ] ): Önbellekteki belirli bir veriyi silmek için kullanılır.
Parametrelerin Anlamları
  • $key: Verinin önbellekte hangi isimle saklanacağını belirtir.
  • $var: Önbelleğe alınacak veriyi (string, array, object vb.) temsil eder.
  • $flag: Sıkıştırma kullanılacaksa MEMCACHE_COMPRESSED veya 1 kullanılır. Varsayılan olarak 0'dır. Sıkıştırmayı Zlib kütüphanesi ile yapar.
  • $expire: Verinin önbellekte ne kadar süreyle kalacağını saniye cinsinden belirtir. Varsayılan olarak 0'dır, bu da verinin manuel olarak silinene kadar önbellekte kalacağı anlamına gelir. En fazla 2592000 (30 gün) değeri girilebilir.
Örnek Kullanım (Nesne Yönelimli API)

İşte Memcache'i bir sınıf olarak nasıl kullanabileceğimize dair basit bir örnek:


$memcache = new Memcache;
$memcache->connect("127.0.0.1","11211") or die("Memcache'ye bağlanılamıyor!");

$isim = "Ali";
// "isim" anahtarıyla "Ali" değerini 100 saniye süreyle önbelleğe ekle
$memcache->set("isim", $isim, false, 100); 

// "isim" anahtarına sahip veriyi oku
$okunan_isim = $memcache->get("isim");
echo "Önbellekten okunan isim: " . $okunan_isim . "
"; // Çıktı: Önbellekten okunan isim: Ali // "isim" anahtarına sahip veriyi "Veli" olarak güncelle ve 30 saniye süreyle tut $memcache->replace("isim", "Veli", false, 30); $guncel_isim = $memcache->get("isim"); echo "Güncellenen isim: " . $guncel_isim . "
"; // Çıktı: Güncellenen isim: Veli // "isim" anahtarıyla tekrar veri eklemeye çalış (zaten var olduğu için false döner) $ekleme_sonuc = $memcache->add("isim", "Ayşe", false, 100); if (!$ekleme_sonuc) { echo "Hata: 'isim' anahtarı zaten mevcut olduğu için eklenemedi.
"; } // "isim" anahtarına sahip veriyi sil $silme_sonuc = $memcache->delete("isim"); if ($silme_sonuc) { echo "'isim' anahtarı başarıyla silindi.
"; } // Tüm verileri kalıcı olarak temizle // $memcache->flush(); // Memcache sunucusu ile bağlantıyı kapat $memcache->close();
Örnek Kullanım (Prosedürel API)

Memcache'i prosedürel olarak da kullanabilirsiniz:


$memcache = memcache_connect('127.0.0.1', 11211);

// "anahtar" anahtarıyla "değer" değerini 30 saniye süreyle önbelleğe ekle
memcache_set($memcache, 'anahtar', 'değer', 0, 30);

// "anahtar" anahtarına sahip veriyi oku
$degisken = memcache_get($memcache, 'anahtar');
echo "Okunan değer: " . $degisken . "
"; // "anahtar" anahtarına sahip veri yoksa ekle $ekleme_durumu = memcache_add($memcache, 'yeni_anahtar', 'yeni_değer', 0, 60); // "anahtar" anahtarına sahip veriyi güncelle memcache_replace($memcache, 'anahtar', 'yeni_güncel_değer', 0, 30); // Memcache sunucusu ile bağlantıyı kapat memcache_close($memcache);

Gördüğünüz gibi, Memcache sayesinde veritabanı sorgularınızı önemli ölçüde azaltabilir, böylece web uygulamanızın daha hızlı ve daha verimli çalışmasını sağlayabilirsiniz. Özellikle dinamik içerikli, sık güncellenmeyen verileri önbelleğe alarak büyük bir performans artışı elde edersiniz.

Umarım bu makale Memcache'i anlamanıza ve projelerinizde kullanmaya başlamanıza yardımcı olmuştur. Unutmayın, performansı optimize etmek her zaman üzerinde durulması gereken önemli bir konudur.

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder