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:
|
|
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ı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
|
|
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
|
|
Ş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.
Yusuf Koç.
önceki yazı XHTML, CSS, jQuery - Manşetler Modernleşsin! |
sonraki yazı CodeIgniter'da Digg Stili Sayfa Numaralandırma |
ikinci paragrafta bahsettiğin linkler ortaya çıkmamış. umarım kodaman editörleri düzenlemeni onaylarlar, bende onaylamamışlardı da.
@darkhorn
evet haklısınız linkleri vermeyi unutmuşum yazıyı güncelledim umarım editörler çabuk bi şekilde onaylar..
bu cache özelliği zaten mySQL ile veya msSQL ile hazırda geliyor biliyorum ben, stored procedure kullandığımızda aktif hale geliyordu yanlış hatırlamıyorsam!
@lazaronnie
yanlış hatırlıyorsun. stored procedure bir cache değil sadece çok sık ve aynı tarz sql cümlelerini mysql tarafında derlettirip sadece sonucu alıyorsun.
XCache ise default gelen bir cache mekanizması değil. Sonradan sunucuya kurulan bir eklenti kütüphane diyebiliriz. Yalnız yazımda da söylediğim gibi ben mysql den alınan bilgiler üzerinde bir xcache örneği gösterdim bu demek değildir ki XCache mysql cachedir diye. XCache ile herhangi bir php kodunu veya içeriği de cache edebilirsiniz. Örneğin sabit bir txt den aldığınız verileri sürekli fopen veya file_get_contents ile içeriği okumak yerine bir sefer okuyup da cache edebilirsiniz.
umarım anlatabilmişimdir.
@radienceviz stored procedure'ın ne olduğunu biliyorum. Stored procedure kullandığımızda mySQL server ilk sorgu için işlem yapıp sonuçları önbelleğe almakta aynı sorgular tekrarlandıkça yeniden sorgulamak yerine bellekten döndürmekte ki bu durum sizin işleminizle aynı şey! benim bahsettiğim bu bellekleme işlemiydi. Xcache'den anlamam ben.
xcache'nin görevini anladım. ama veriler için biz yine de mySQL'in kapasitesini kullanmaya devam edelim derim:))
@lazaronnie
anlamadığın şey ve anlamamaktaki ısrar ettiğin şey xcache ile ben sql cacheledim ama yazımda da belirttim ki siz herhangi bir şeyi de cacheleyebilirsiniz neden direk hala stored procedure odaklanıyosunuz anlamadım.
Siz sql cache yapmayabilirsiniz ama diğer herhangi birşeyi cacheleybilirsiniz.
Neyse diyorum tabi siz yine şartlanacağınız için mysql stored procedure bunu da anlamamazlıktan gelebilirsiniz.
Nitekim kendinizi XCache = mysql cache olarak algıladığınız için.
anladım dedimya dostum xcache'nin ne olduğunu! anladık tamam sql dışındaki olguları da bellekleyebiliyoruz:))
bence siz benim şartlandığıma şartlanmışsınız hepsi bu
Asıl merak ettigim konu, Xcache nerde caching yapıyor. Dosyada mı, Memory'de mi? Eaccelerator ile farkı var mı? Varsa neler. Memcache ile de karşılaştırırsan, Memcached den farklı oldugunu biliyoruz ama fark altyapısında mı yoksa kullanım alanlarında mı?
Bu konuda fikirlerinizi paylarşır mısınız?
Saygılar
@banakitapal
memory de cache yapıyor. scriptin yeniden derlenmesini önleyerek daha hızlı erişim sağlanıyor. memcache olayına gelirsek memcache sadece mysqli cache ederken xcache ise hem opcode cache hem de aynı zamanda sql sorgular sonucunda dönen datalarıda cache edebilirsiniz. Eaccelerator hakkında ise bir bilgim yok bişey diyemeceğin o konuda.
memcached dada ayni sekilde herseyi cacheleyebilirsiniz, xcache opcode cache de sagliyor, memcached distributed kullanabilirsiniz, yani 10 serverinizda birden atil kalan memory yi kullanmak icin, memcache kurup, direk sorgu yapabilirsiniz, hangi nodeda/serverda veri varsa ordan donecektir. xcache eaccel ile ayni hemen hemen yalniz xcache daha hizli.
bu arada stored procedure, stored procedure dir, sonuclari cachelenmez, mysqlde query cache var, ayni sorguyu ikinci kere gonderdiginizde optimizer execution plan cikartmakla falan ugrasmadan direk cacheden sorgu sonucunu dondurur, aslinda execution planida her zaman olusturmaz, onuda cachelerde bu ayri hikaye, sorgunun bagli oldugu tablolara update/insert/delete gelirsede o sorgu sonuclarinin cachelerini siler, mssql i bilemiyorum ama mysqlde stored procedurein sonucu cachelenmez.
stored procedure bildigimiz fonksiyon/prosedurle hemen hemen ayni sey, tek farki ayni isi veritabaninda yaptiginiz icin, datanin tamamini cekmeden fonksiyonu calistirabilirsiniz, bazi stored procedurlar - eger siz isterseniz - sorgu sonucu/rowset/dataset yada cursor vs. dondurebilir tabii.
teorik olarak - esasen pratiktede olmasi gereken bu tabii - bir fonksiyonu ayni parametrelerle cagirdiginizda her zaman ayni sonucu dondurmesi gerekir, mesela carpim = function(x,y){return (x*y);} gibi, o yuzden bir fonksiyonun sonucunu cacheleyebilirsiniz, o fonksiyonun baktigi/kullandigi tablolardaki veri ayni kaldigi ve ayni parametrelerle cagrildigi surece sonucu ayni dondurmesi gerekir - tabii sonuc donduren bir fonksiyondan bahsedersek - usersil(1) gibi bir prosedurunuz varsa bunun cachelenmesi mantikli degildir zaten. velhasili bazi veritabani ureticileri stored procedurlarin sonucunu cachelemenize olanak sagliyor olabilir tabii...
memcache - genel olarak xcache vs. de - veritabanina gore cok daha ucuzdur, daha az kaynak tuketirler, cok daha hizlidirlar ama sakladiginiz veri ucar - guvensizdir yani veritabani gibi saklamaz verilerinizi -, uzerinde sorgu yapamazsiniz - bana en son siteye giren kullaniciyi getir gibi seyler diyemezsiniz -
ornegin memcache e butun bir sayfayi cacheletip, eger sayfa orda varsa hic framework/php/mysql vs... ye dokundurtmadan sayfayi servis edebilirsiniz, muhtemelen sayfaya bagli olarak calismasi suresi en az bir kac yuz kat kadar daha hizli olacaktir.
Bu arada sunucularına aşırı yük binmemesi için çoğu hosting şirketi sunucularına XCache kurmayı reddediyor. Tüm bu hazırlıklara başlamadan önce sunucunuzda XCache yüklü olup olmadığını kontrol ederseniz iyi ederseniz. (tabi ki sözüm kendi sunucusu olmayanlara...)
Veritabanı sorgularında cache kullanmak için bir veritabanı sınıfı olan ezSQL tavsiye ederim. Hem veritabanı sınıfı hem de cache sınıfını ayrı ayrı kullanmadan, ikisi bir arada daha pratik çözüm.
Sevgili RaidenCeviz, çok teşekkürler gayet açıklayıcı ve güzel bir yazı olmuş.
Benim genel olarak (sadece senin yazın ile ilgili değil yani) takıldığım tek bir nokta var, o da ısrarla betiklerde Türkçe kullanmak :)
xcache->getHata() nedir yahu? :) yani sadece bana mı komik geliyor bilemiyorum ama bunu ya getError ya da hataGetir gibi (ki çok komik bence) yazmak daha doğrudur.
Israrla betiklerde (sınıflar olsun değişkenler olsun) Türkçe kullanmak sanıldığının aksine okumayı kolaylaştırmıyor, daha da anlamsız hale getiriyor bence.
Ha diyeceksiniz ki o zaman insanlar nasıl anlasın kodu. Doğru ya herkes ingilizce bilmek zorunda değil. İşte tam bu noktada koda ekleyebileceğimiz "comment" satırları giriyor devreye.
Kişisel tercihim, kodumun tamamının evrensel hale gelebilmesi için ingilizce tutulması, commentlerin ya da dökümantasyonun ise lokalize edilmesi yönünde.
Tekrar ellerine sağlık.
katılmıyorum, Türkçe değişken sınıf ve fonksiyon tanımı da yapılabilir ve gayet güzel uygulama alanı bulabilir. hataGetir'in ne tarafı komik anlayamadım?
getHata gerçektende komik (ki bende zaman zaman kullanırım bu komik ifadeleri) ama yanlış bir şey
Merhabalar lazaronnie,
hataGetir veyahut bir çok diğer örnekte komik olan taraf; Biz bir şekilde Türkçe'yi korumaya çalışıyoruz, ya da belki sadece kodu kullanmak isteyen amatör - orta profesyonel programcılara daha anlaşılabilir bir kod sunmaya çalışıyor olabiliriz, ama biz aslında bu metod isimleri ya da değişkenleri Türkçe yazdığımızı zannediyoruz. :)
siseleriDiz() Türkçe bir fonksiyon adı mı şimdi? (şişe?)
Yani evet, komik gelmeyebilir herkese, zaten bunun bana özel bir durum olduğunu belirtmiştim. Ama bence çok zorlama oluyor.
Tabikide kişisel tercihtir, kimseye lafım yok.
Teşekkürler.
kişisel fikrindir bende bişey diyemem, ama bence sonuçta edebiyat baş yapıtı üretmiyoruz o kadar kusur illaki olacaktır. Bence türkçe tanımlar güzel bir ayrım sağlar programlarda. özellikle platformun kullanmakta olduğu hazır gelen nesneler fonksiyonlar ve tanımlama öğelerinden ayırmış oluruz kodumuzu.. böylece kodlama yaptığımız dili hiç bilmeyen birisi bile hangi komutların program için üretildiğini hangilerinin platformun varsayılan değerleri olduğunu kolayca anlayabilir. özellikle de renklendirme olanağı bulamadığımız zamanlarda oldukça faydalı olur. buda benim görüşüm..
walla şahsen neden getHata() gibi birşey yazdığımı bilmiyorum el alışkanlığı olsa gerek komik geleceği aklıma bile gelmemişti. Şimdi yazdığımız sınıfların veya kodlar da evrensel dil kullanırsak belki yaygınlaşması daha kolay olabilir ama benim düşünceme göre dünya zaten biliyor biz Türkiye 'deyiz ve burada yaşayanlara ışık tutmaya çalışıyoruz hepimiz bir şekilde bilgilerimiz dahilinde. Burada ben de lazorinnie arkadaşımıza katılmaktayım. Kullanılan Türkçe adlar kişinin hem kullanım açısından kolaylık sağlıcak hem de anlamasına belki daha da çok yardımcı olacaktır.
Türkçe betik ifadelerinin komik gelmesi çok yaygın bir durum korkulacak birşey yok. Egemen dilin ve bilincin yerel dil ve bilinç üstündeki baskısı diyebiliriz buna. Biraz dilimize güvenelim ve sevelim bu şekilde tedavi edilebilir bu sorun.
Anlatım gayet güzel tebrikler. Cache ve db optimizasyonu konusunda yeni yazılar bekleriz.
Israrla betiklerde (sınıflar olsun değişkenler olsun) Türkçe kullanmak sanıldığının aksine okumayı kolaylaştırmıyor, daha da anlamsız hale getiriyor bence.
ben de tüm değişkenlerimde ve kullanabildiğim her yerde Türkçe'mi kullanırım ve hepde kullanacağım hiç de usanmam!
kime ne kadar komik gelirse gelsin anlamayan anlamasın. . .
her zaman bizim başkalarını anlamamız gerekmiyor kendimizi anlasak yeterli ;)
İlk olarak makale ve örnekler için teşekkürler anlaşılır olmuş.
Ama benim daha çok ilgimi çeken şey son koyduğun 3 adet arrayı printlediğin resimdeki yazının font tipi çok hoş gözüküyor hangi aileden acaba tam adını verebilirmisin birde windows fontumu?
Teşekkürler
@dademurphy
makaleyi hangi ortamda yazdığımı hatırlamıyorum şuan. o yüzden net kesin bişey diyemeceğim..
Segoe UI veya Trebuchet MS olabilir.
@RaidenCeviz
Teşekkür ederim ilgin için hala arayıştayım ((:
@lazaronnie
İkiside değil üstadım malesef.Genelde unix tabanlı sistemlerde çok sık görüyorum bu fontu.
@dademurphy
linuxda yazmışım pardus ön tanımlı yazı tipi dejavu idi ama bilemiyorum isterseniz bir göz atınız...
@RaidenCeviz
cevabın için çok teşekkürler dejavu font ailesini araştırdım evet kullandığın font o imiş geri dönüşün için çok teşekkürler.
Ayrıca benim gibi bu font'u beğenenler için indirme linki için burdan buyrun.
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.