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

    XCache Sınıfı

  • 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

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.