Kadir Özdemir

  • Ben Kimim
  • PHP
  • Sencha Touch
  • Home/
  • PHP /
  • Silverstripe: Sorgulari Cachleme

Silverstripe: Sorgulari Cachleme

Skorp 26.03.2012 Leave a Comment

Silverstripe de genellikle birbiriyle iliskili birden cok nesne ile calisiriz. Bu nesneler ile calismak kod yazarken nekadar güzel olsada, sitenin performansini oldukca etkilemektedir.

Silverstripe bu konuda cok kolay bir cache Sistemi kullanmakda.

Böyle basit bir sorgumuz var sayalim

$result = DataObject::get('ProductCategory',"URLSegment='".Convert::raw2sql($urlSegment)."'");

Bu sorgu icin yeni bir fonksiyon yazalim ve bakalim sorunu nasil cözeriz.

protected function getCategoryID($urlSegment) {
    //cachekey olusturalim
    //preg_replace kullanmamiz lazim cünki Zend_Cache a-zA-Z_0-9 disindaki karakterlere izin vermiyor
    $cachekey = 'Cache_Category'.preg_replace('/-/','_',$urlSegment);
    // SS_Cache in factory methodu üzerinden cache objesini olusturalim
    $cache       = SS_Cache::factory($cachekey);
    //cache yükliyelim
    $result     = $cache->load($cachekey);
    //cache varsa unserialize yapip result degiskenine atiyalim
    if ($result) {
	$result = unserialize($result);
    } else {
        //cache yoksa veya süresi gecmisse yukaridaki sorgumuzu calistirip kaydedelim
	$result = DataObject::get('ProductCategory',"URLSegment='".Convert::raw2sql($urlSegment)."'");
	$cache->save(serialize($result));
    }
    return $result;
}

UPDATE: 17.05.2012
Pagination ve resimli iliskilerde serialize yüzünden cikan sorunlar yüzünden cache i biraz degistirdik.

protected function getCategoryID($urlSegment) {
if (!isset($_GET['start']) || !is_numeric($_GET['start'])){
			$start = 0;
		} else {
			$start = intval($_GET['start']);
		}
    $cachekey = 'Cache_Category'.preg_replace('/-/','_',$urlSegment);
    $cache       = SS_Cache::factory($cachekey);
    $result     = $cache->load($cachekey);
    if ($result) {
	$result = unserialize($result);
        //kayit ettigimiz arrayi bir DataObjectSet e ceviriyoruz.
        $doSet = $this->buildDataObjectSet($result, 'DataObjectSet', $this->class);
        //pagination icin limitleri belirleyelim
	$doSet->setPageLimits($start, 10, $doSet->Count());
	return $doSet;
    } else {
	$result = DataObject::get('ProductCategory',"URLSegment='".Convert::raw2sql($urlSegment)."'");
        //tüm icerikleri bir Array e alip, cache e öyle kayit ediyoruz.
        if($result!= null) {
	     $saveArr = array();
              foreach($result as $value) {
		$saveArr[] = $value->getAllFields();
	     }
	    $cache->save(serialize($saveArr));
	}
    }
    return $result;
}

Bu arada yukaridada yazdigim gibi SS_Cache arka planda Zend_Cache kullanmakda.
Template de degisen birsey yok.
Template cache lerine birdahaki yazimizda anlatmaya calisacagim.

Silverstripe API: http://api.silverstripe.org/2.4/sapphire/core/SS_Cache.html

Skorp
2012-03-26
Tags:
PHP Silverstripe
Share story:
← PreviousPhp 5.4 yayinlandi
Next →Spamassassin test

Written by Skorp

View all articles by Skorp

Website: http://www.skorp.eu

Related Articles

  • Silverstripe snippetler

  • Silverstripe login sorunu

  • Php 5.4 yayinlandi

  • Silverstripe yeni sayfa tipleri

  • Silverstripe

Leave a Comment Cancel Reply

Your email address will not be published. Required fields are marked *

Social networks

Etiket Bulutu

Android Bilgisayar & Internet C# Cms css diger Kodlar featured Genel Java Javascript Linux Mobile PHP Silverstripe typo3 Veritabani Windows Zend Framework

Links

  • H E R K O N U
  • Hüseyin Koyun
  • Urban23k

Son Yorumlar

  • Primary Key – Unique ve Index nedir? için Onur
  • Centos de apache, php ve mysql kurulumu için sezer fidancı
  • React Native – Kurulum için React Native | Kadir Özdemir
  • React Native için React Native – Kurulum | Kadir Özdemir
  • Ben Kimim için serkan

Twitter

Follow @skorp54
There is an error in twitter widget, please make sure that you have set up the Twitter API settings
  • Ben Kimim
  • PHP
  • Sencha Touch

Arsivler

Kategoriler

Copyright © 2014 webberz.at