RSS

CodeIgniter Controller/Method adına göre cache gruplandırma

9 18 Mart 2012 ~ Musa Avcı — Orta

CodeIgniter standart output cache yönteminde sadece bir parametre ile cache süresini belirtmemize izin veriyor ve tüm cache dosyaları tek bir klasörde tutuyor.

Çok uzun süreli cache alınması gereken, fakat güncel olan bir sisteminiz varsa, varsayılan output cache yöntemi bu iş için pek uygun olmuyor (Örneğin: haber, blog, video vb. sistemler). Çünkü parametrede verdiğiniz dakika boyunca cache tutuyor ve siz controller içerisinde cache süresini değiştirseniz de daha önceden alınan cache süresi bitene kadar gösteriyor. Ancak dosyayı silerseniz tekrar çalışıyor.

Bana göre böyle bir durumda olması gereken controller ve methodlarına göre ayrı ayrı klasörler içerisinde gruplandırılarak cache dosyaları oluşturulmasıydı. Ve bu olayı basit bir şekilde kendi çekirdek kütüphanemi oluşturarak yaptım.

Sonuç olarak:

adres: /haberler/detay/123
cache: /cache/haberler/detay/d27d9ff7f12cffdab381fe72a51cb306

adres: /videolar/izle/123
cache: /cache/videolar/izle/1665c19fd83abef189b1e7aa97c24c68

ya da router kullanarak:

router: $route['(:any)/(:any)'] = 'blog/yazi/$1/$2';
adres: /kategori/baslik => blog/yazi/kategori/baslik
cache: /cache/blog/yazi/8addac4687ec7a85ab8321f2df7fe180 

Bu sayede sadece istediğiniz bölümdeki içeriklerin cache dosyalarını silerek güncelleyip, diğer kısımların cache dosyalarının durmasını sağlayabilirsiniz.

Yöntemi uygulamak için buradaki MY_Output.php dosyasını indirip application/core dizininize göndermeniz yeterli.

Grupdan bir cache dosyası silme

Yukarıda bahsettiğim gruplandırma yöntemi ile toptan müdaheleyi kolaylaştırırken bu aşağıdaki helper ile tek tek işlem yapabilirsiniz. Şuradaki yazıda hazırlanmış delete_cache() helper fonksiyonunu benim hazırladığım alt klasörlü grup yöntemine göre yeniden düzenledim.

Örnek kullanımı:

// tek sayfa silmek
delete_cache(array('http://www.siteniz.com/kategori/baslik'), 'blog/yazi');

// birden fazla silmek
$pages = array(
   'http://www.siteniz.com/haberler/detay/123',
   'http://www.siteniz.com/haberler/detay/124',
   'http://www.siteniz.com/haberler/detay/125');
delete_cache($pages, 'haberler/detay');

Normal hazırlanmış cache helperdan tek farkı; bizim gruplandırma için oluşturduğumuz alt klasörleri ifade etmemiz için sonuna yazmamız gereken alt klasör yolu. Benim son olarak düzenlediğim ve bu grup olayı için olan cache helper dosyasına buradan ulaşabilirsiniz.

Bu yazıda hazırlamak istediğim yöntem diğer cache driverlarını (bkz: memcache, apc) kullanmadan tüm çıktıyı dosya olarak saklamak ve controller çağırdığında hiç bir şey yüklemeden direkt cache dosyasını açmasını isteyenler için idealdir. Yoksa diğer alternatif cache driverları ile istediğiniz bir değişkeni istediğiniz süre cache alabilir ve temizleyebilirsiniz.

Bir başka PHP serüveninde görüşmek üzer sağlıcakla kalın!

Etiketler:

Yazılanlar ilgini çektiyse, yenilerinden haberdar olmak için e-mail bültenine abone olabilirsin.

"CodeIgniter Controller/Method adına göre cache gruplandırma" yazısı için 9 yorum yapılmış.

  1. Phpci dedi ki:

    Elinize sağlık musa bey çok güzel bir makale olmuş

  2. Ali Görkem dedi ki:

    Faydalı bir modifikasyon olmuş teşekkürler.

  3. Cihan Aksu dedi ki:

    CodeIgniter frameworkü konusunda özellikle de Türkçe yazı bulmak çok güç. Yazılarınızı beğenerek takip ediyorum, teşekkürler.

  4. Tahir Uyanık dedi ki:

    Merhaba. Güzel bir makale. Teşekkürler.

  5. Bilal YILMAZ dedi ki:

    Güzel paylaşım. Teşekkürler..

  6. erotik filmci dedi ki:

    Tşk hocam,
    birde merak ettiğim konu;

    sidebarda üye menusu var doğal olarak her üyeye ayrı görünmesi gerekiyor bu mantıktan çıkarak ben
    eğer üye giriş yapmış ise cache() fonksiyonunu çağırdım
    fakat sonuç olarak
    eper o sayfanın daha önce cache kopyası yokise normal çalışıyor ve cache tutmuyor
    fakar o sayfaya ait cache var ise yani başka bir kullanıcı tarafından oluşturuşdu ise yine üye giri olan kullanıcıyada görünüyor
    bu konuda bi yorumun var mı acaba

  7. Pazarus dedi ki:

    Çok güzel bir örnek biz de http://www.adreseyemek.com adresinde codeigniter ve bootsrap kullandık. codeigniter kücük boyutlu olmasına rağmen kullanımı kolay ve hızlı çalışan bir framework herkese tavsiye ederim

  8. Hakan dedi ki:

    Birza giriş seviyesinde örnekler , kurulum ve kullanımla Laravel anlatırsanız sevinirim.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir