Memcache

Active Record mamcache kullanımı. Konu hakkında yeni giriş yapmatayım yardımlarınız istiyorum.

$posts = Post::model()->cache(1000)->findAll();

$posts = Post::model()->cache(1000)->with(‘author’)->findAll();

  1. yukarıdaki 1 örnek ile 2 örnek arasındaki fark nedir. "with" kısmı ne işe yarar. "1000" kısmı tutlacak zaman olması gerek sanırım ?

  2. Onun dışında ramde saklanacak yer kalmadığı zaman, oradaki olay nasıl gerçekleşiyor. Bazı mamcache veri kaybınız olabilir diyor. Veritabanına bilgi kaydedili olurken hangi veri kaybından söz ediliyor.

  3. Web sitesini genel olarak mamcache nasıl sokabiliriz. Yani css, image, html dosyaları tekrar tekrar yüklenmesin atıyorum 5 dakikada ypaılmasını sağlama bunu Yii de yapabilirmiyiz.

  4. Yii framework datagridde mamcache kullabiliniyormu. Data gridde LIKE komutu calışagı için Kullanmak sıkıntılara yol açarmazmı ,ram yetersizliği gibi.

  5. Session yerine mamcache kullanmak doğrumudur. Örnek as soyad, ID, companyID, employeesRight gibi kavramları sessionlara atıyoruz login olurken. Bunları mamcachede kullanmak, Performansı nasıl etkiler.

$posts = Post::model()->cache(1000)->with(‘author’)->findAll();

Burada eger senin modelinle Author arasında Has-Many gibi bir ilişki varsa sen bir satırda 2 sinide cagırmıs oluyor ilişkili authorlarıda cache e ekliyorsun.(1000 saniye.)

Caching limiti 1 mb. eger senin query nin sonucu bu boyutu asıyorsa cacheleme hata verir. o yuzden cache alacagımız sonucları limitleriz.


$posts = Post::model()->cache(1000, $dependency, 2)->with('author')->findAll(array(

    'limit'=>20,

));

html image gibi zımbırtılarıda cache e eklemek istiyorsan. Controllerına bir filter eklemen lazım.


public function filters()

{

    return array(

        array(

            'COutputCache',

            'duration'=>100,

            'varyByParam'=>array('id'),

        ),

    );

}

Bu durumda controllerındaki tum action lar 100 sn boyunca cachede tutulacaktır.zamanı cok arttırmak serverda gereksiz cachelemeye sebeb olur bilginize.

datagrid de kullanılacak veriyide memcache e alabilirsiniz. Ram yetersizliği sorununu yukarıda anlatmıstım data boyutunuz cok buyukse zaten cache e alamıyor.

Session yerine memcache kullanmanız yanlış. memcache deki veriye guvenemezsiniz. ömrü dolmadıgı halde işletim sistemi tarafından bu alan bosaltılabilir. o yuzden memcache i genellikle sık kullanılan DB query lerde kullanırlar.