12 Şubat 2009XCache Kullanımı
Merhaba arkadaşlar. Bu yazımda kısaca XCache ‘ye değineceğim. Xcache nedir diyecek olur isek kısaca kod cacher diyebiliriz. Biraz daha açar isek örneğin bir sql sorgusu sonucunda dönen kayıtları cache alıyoruz. Aynı sorgu tekrarlandığında önce XCache ye bakıyoruz eğer daha önceden alınmış ise bilgileri XCache den çekiyoruz. Değil ise XCache ye set edip belli bir süre tabi bu isteğe bağlı olarak cachelenmesini sağlıyoruz. Bunun bize ne gibi bir faydası olacak derseniz eğer örneğin tekrar tekrar aynı bilgi için mysql e sorgu yapmaktan kurtulabilirsiniz. Tabi ben mysqlden örnek veriyorum illaki mysql kayıtlarını cacheleyecek diye bir kaidemiz yok herhangi bir dizi array da olabilir.
Önce XCacheyi kurmamız gerekmektedir. Windows kullanan kullanıcılar şu adresi ziyaret edebilirler kurulum için. Linux kullananlar ise buraya tıklayarak XCache kurulumunu yapabilirler.
Evet XCache kurulumunu yaptığınızı varsayarak nasıl cache yapabiliriz birer örnekle açıklık getirelim ve yazımızı bitirelim. Ben test için bir isimler tablosu ( ad, soyad, sehir ) oluşturdum ve bir kaç tane isim ekledim.
XCache için öncelikle sınıfı paylaşayım. Ben XCache işlemlerinde bu sınıfı kullanacağım.
xcache.php:
<?php /** * Betik Yazarı: Yusuf KOÇ ( Raiden ) * http://www.ysfkc.com * * Copyright 2009 ysfkc.com * Licensed under the GNU General Public License, version 2. * See the file http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt * **/ class XCache { private static $getMsg = array(); /* * XCache Isset Doğrulama * @access: public * @param: string $name */ public static function x_isset($name) { if (xcache_isset($name)) { return true; } else { self::$getMsg[] = $name.' Adında Bir Cache Bulunamadı!'; return false; } } /* * XCache SET Metodu * @access: public * @param: string name cache edilecek verinin xcachde saklanacagi isim * @param: string name cache edilecek veri * @param: int time cache edilecek verinin ne kadar süre cache edileceği saniye cinsinden time değeri */ public static function x_set($name,$data,$time=NULL) { if (self::x_isset($name) !== FALSE) { return self::x_get($name); } else { if ($time === NULL) { if (xcache_set($name,$data)) { return true; } else { self::$getMsg[] = $name.' Cache Edilemedi. Yeniden Deneyiniz!'; return false; } } else { if (xcache_set($name,$data,$time)) { return true; } else { self::$getMsg[] = $name.' Cache Edilemedi. Yeniden Deneyiniz!'; return false; } } } } /* * XCache UNSET Metodu * @access: public * @param: string name unset edilecek cache ismi */ public static function x_unset($name) { if (self::x_isset($name)) { xache_unset($name); } else { self::$getMsg[] = $name.' Unset edilemiyor. Bulunamadı'; return false; } } /* * XCache GET Metodu * @access: public * @param: string name cacheden alınacak data ismi */ public static function x_get($name) { if (self::x_isset($name)) { return xcache_get($name); } else { self::$getMsg[] = $name.' Adında Bir Cache Yaratılmamıştır.'; return false; } } /* * XCache HATA Metodu * @access: public */ public static function getHata() { echo '<ul>'; foreach(self::$getMsg AS $value) { echo '<li>'.$value.'</li>'; } echo ''; } } ?>
Yukarıdaki yayınladğımız sınıfımıza kısa bir göz atar isek beş adet metottan oluşmakta. Bu metotlar hakkında kısa bir bilgi de verelim hemen
- x_isset($name) metodu $name adında daha önceden cachlenmiş bir veri var mı diye bakar true veya false döner
- x_set($name,$data,$time) metodu ile cache edilecek veriyi bildiriyoruz. $name ile hangi cache isminde saklanacağını söylüyoruz. $time değişkeninde ise eğer süre tanımlayacaksak örneğin verimizin iki dakika boyunca cachelenmesini istiyorsak 120 yazıyoruz eğer saniye belirtmek istemiyorsak NULL diyerek geçiyoruz
- x_unset($name) metoduyla ise cache edilmiş bir veri veriyi yok ediyoruz
- x_get($name) ile $name ile bildirilen cache verisi mevcut ise cachelenmiş veriyi çekiyoruz.
- getHata() ile de herhangi bir hata oluştuğunda ekrana hata çıktısını yazdırıyoruz
XCache Sınıfı
Evet sınıfımız bu kadar şimdi gelin veritabanından okunan bir dizi arrayı cache edelim. Yine hatırlatmadan geçmeyeyim ben veritabanında bir isimler tablosu oluşturdum ve onu kullanacağım. Siz herhangi bir veriyi de cacheleyebilirsiniz.
xcache_cache.php
<?php # Outbut Buffer ob_start(); # Veritabanı Bağlantısını Yapalım $db = new mysqli('localhost','root','','dnm'); # XCache Sınıfını Dahil Et include_once('xcache.php'); # XCache Sınıfını Başlatalım $xcache = new XCache; # İsimleri Saklayacağımız Arrayımız $data = array(); # İsimleri Çekelim $query = $db->query("SELECT * FROM isimler ORDER BY id"); # İsimleri Bir Dizi Arrayda Toplayalım while ($rows = $query->fetch_array()) { $data['ad'][] = $rows['ad']; $data['soyad'][] = $rows['soyad']; $data['sehir'][] = $rows['sehir']; } # Şimdi $data Dizimizi Cacheleyelim if ($xcache->x_set('isimler_tablosu',serialize($data),NULL)) { echo 'Bilgiler Cache Edildi <br />'; echo '<a href="xcache_bilgi_oku.php">Cache Bilgileri Oku</a>'; } else { $xcache->getHata(); } # Outbut Buffer Flush ob_end_flush(); ?>
Yukarıdaki dosyamızda ise öncelikle bir veritabanı bağlantısı yaptık. Daha sonrasında XCache sınıfımızı dahil edip sınıfımızı başlattık. Veritabanından alacağımız verileri saklamak için $data isminde bir array tanımladık. Ardından ise isimler tablosuna bir sorgu yaptık ve tüm kayıtları istedik devamında ise while ile döngüye girerek tüm kayıtları uygun bir formatta $data dizisine aktardık. Yine devamında sınıfımız sayesinde elde ettiğimiz $data arrayını XCache de isimler_tablosu ile 120 saniye boyunca cache edilmesini tanımladık ve bilgileri okuyacağımız sayfaya yönlendirdik. Cachelenmiş verinin XCache adminden bir görüntüsü aşağıdadır.
xcache_bilgi_oku.php
<?php # XCache Sınıfını Dahil Edelim include_once('xcache.php'); # XCache Sınfını Başlatalım $xcache = new XCache; # Cache 'den isimler_tablosunu Okuyalım if ($xcache->x_isset('isimler_tablosu')) { $veri = unserialize($xcache->x_get('isimler_tablosu')); # Alınan Bilgileri Gösterelim print_r($veri); } else { $xcache->getHata(); } ?>
Şimdide gelelim en son dosyamızda yaptıklarımıza. Yine öncelikli iş olarak XCache işlemlerinde kullanacağımız sınıfı çalışma betiğimize dahil ettik ve sınıfımızı başlattık. Daha sonrasında ise sınıfımızın x_isset() metoduyla isimler_tablosu adında daha önceden cachelenmiş bir veri var mı diye kontrol ettik. Eğer metod bize true döndüyse cachedeki verileri $veri değişkenine aktardık ve print_r() fonksiyonu ile arrayı debug ettik. Metod eğer false dönseydi getHata() metodu işleme alınarak bize isimler_tablosu adında bir cachelenmiş veri olmadığını söylecekti.
Basit bir şekilde Xcache kullanımını anlatmaya çalıştım. Umarım faydalı olabilmişimdir.




Eline sağlık kardeşim. Yine döktürmüşsün
Teşekkurler güzel bir döküman olmuş.
En kısa sürede sitelerime uygulamaya başlıyacagım.
Çok teşekkürler aradığım bir dersti
teşekkürler cok ii bi döküman olmus
Hocam bu eklentinin cacheleri gorebilecegimiz admin paneline ne şekilde ulaşabiliriz ?
@ömer
XCache için php.ini de yönetici kullanıcı adı ve şifre tanımladıktan sonra xcache içinde admin klasörü var onu da web sitenize kopyalayıp
http://www.site.com/admin diyerek belirlediğiniz kullanıcı adı ve şifre ile giriş yapıp görebilirsiniz.
Halletim gercekten guzel bi eklenti , yalniz dikkatimi ceken diger bir nokta , admin panelinde LIST PHP kisminda dosyalarimida gosteriyor , yani cache aliyor gibi bir durum var sanirim , bu neyin nesidir dikkat ettinmi hic ?
@ömer
aynı zaman opcode cache de yapıyor orda php dosyalarınız hakkında bilgi alabilirsiniz açılış süresi vs gibi…
anladim tesekkurler
Keşke windows üzerinde kurulumunu anlatsaydın … Hiçbir yerde bununla alakalı bir makale yok genede teşekkürler…
@Kerem
http://xcache.lighttpd.net/wiki/InstallFromBinary
bu adres de kurulumu anlatıyor.
[xcache-common]
;; install as zend extension (recommended), normally “$extension_dir/xcache.so”
;zend_extension = C:/AppServ/php5/ext/php_xcache.dll
zend_extension_ts = C:/AppServ/php5/ext/php_xcache.dll
;; For windows users, replace xcache.so with php_xcache.dll
zend_extension_ts = C:/AppServ/php5/ext/php_xcache.dll
;; or install as extension, make sure your extension_dir setting is correct
extension = C:/AppServ/php5/ext/php_xcache.dll
;; or win32:
extension = php_xcache.dll
[xcache.admin]
xcache.admin.enable_auth = On
xcache.admin.user = “admin”
xcache.admin.pass = “admin” ;21232f297a57a5a743894a0e4a801fc3
Bu şekilde php.ini ye ayarları giriyorum dll dosyasıda yerinde apacheyide restartladım ancak genede olmuyor acaba hata nerede olabilir Raiden?
@Kerem
http://sudrap.org/paste/text/2096/
burdaki ayarlara göre yapmalısın.
Ayrıca admin.pass = “admin” değil admin yerine md5 hash halini yazcaksın.
Bir de xcache.count 4 yazan yeri eğer 4 çekirdek kullanıyorsan 4 yap 2 ise 2 yap 1 ise 1 yapıp dene. bu ini dosyasına göre kendi path lerini ve şifrelerini düzenle.