Symfony2: Önbelleği kendiniz yönetme
Web ajansı » Dijital haberler » Symfony2: Önbelleği kendiniz yönetme

Symfony2: Önbelleği kendiniz yönetme

Önbellek, bilgi işlemin her yerinde ve neyse ki başka yerlerde bulunur. Onsuz, işlem süreleri çok daha uzun olurdu! Adına layık tüm çerçevelerin bir önbellek sistemi kullandığı bir zamanda, neden önbelleği kendimiz yönetmemiz gerekiyor?

Symfony2'de önbellek

Symfony2'de kolayca bir önbellek sistemi kurabilirsiniz. Ayrıca, kesin olmak gerekirse, Symfony'nin kendi önbellek sistemi var gibi görünüyor (app/cache/env/) ve sunucu düzeyinde bir önbellek sistemi de ekleyebileceğimizi (Apache, IIS, …). Bu önbellek tamamen yönetilebilir ve bellek geçicidir. Sunucu yeniden başlatılır başlatılmaz, sunucu önbelleği silinir.

Önbelleğe alma sistemleri

Hangi önbellek sistemleri var? Hafızadan düzenli olarak üç program gelir.

  • önbellek
  • memcached
  • APC
    APC artık önerilmiyor PHP 5.4'ten beri, bu yüzden fişe takmayı denemenizi önermiyorum.

Benim durumumda XCache kullanacağım. XCache'in nasıl kurulacağına dair yazımı da bulabilirsiniz.

Önbelleğinizi neden kendiniz yönetin?

Gelen ve “neden?” diye soran birkaç yorum görebiliyorum. ". Doctrine, önbelleği yöntemiyle kolayca kullanmanıza izin verirken useResultCache(kullanım, gecikme, kimlik). Cevabım basit: ücretsiz tedaviler yapmak.

Size fikir vermesi için küçük bir örnek. Diyelim ki bir veritabanından bir öğeyi önbelleğe alıyorum. Bu varlığı değiştirirsem, verilerin süresi dolana kadar önbellek güncellenmeyecek. Kişiselleştirilmiş bir önbellek yönetimi ile, önbellek ayrılan süreye ulaşmadan önce yeni verileri yeniden ayarlayabilir ve eskilerin üzerine yazabileceğim. Bu, önemli bir yönetim gerektirir, ancak performans kazanımları önemli olabilir.

Symfony2 ve kendi önbelleğinizi nasıl yöneteceğiniz

Kolayca yönetmeniz için size bu küçük not kodunu sunuyorum. Bizim durumumuzda, bu Gist'in işlevi bir SQL sorgusunun sonucunu döndürmeyi amaçlar.

Prototip: işlev çalıştırma ($sql_query, $id = null, $delay = 3600);
ayarları:

  1. _sqlsorgu yürütmek istediğiniz SQL sorgusuna karşılık gelir.
  2. id önbelleğe alınan verilere bağlı tanımlayıcıdır. Bir x kimliği için, bir x içeriğine sahip olacaksınız.
  3. geciktirmek Önbellek verdiğiniz maksimum süre geçerli olacaktır. Varsayılan olarak 3600 saniye. Bu, verilerinizi önbelleğe aldıktan sonra 3600 saniye boyunca kullanılabilir olacağı anlamına gelir.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    işlev yürütmek ($sql_query, $id = null, $delay = 3600)
    {
    // Bir önbellek örneği ilan ediyoruz
    $cacheDriver = yeni DoctrineCommonCacheXcacheCache();
    $sonuçlar = boş;
    //Bir kimlik girildiyse ve önbellek sistemi "x" kimliği için veri içeriyorsa
    if ($id!= boş && $cacheDriver->içerir($id)) {
    //Ardından "x" kimliği için önbelleğe alınmış verileri alıyoruz
    $sonuçlar = $cacheDriver->fetch($id);
    }
    //Veri yoksa, önbelleğe alınan verinin boş olması durumunda
    if ($sonuçlar == boş) {
    //Verileri alıyoruz
    $sonuçlar = bu $->konteyner->al("doktrin")->getManager()->getRepository("NamespaceNameBundle:Varlık")->bul();
    //Önbelleğe alma kimliğimiz varsa
    if ($id!= boş) {
    //X kimliği ve y gecikmesi için verileri kaydediyoruz
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Gelecekteki istekleri sınırlayarak sonuçları döndürürüz
    dönüş $sonuçlar;
    }

Umarım bu not sana yardımcı olur. Yakında görüşürüz ve bu yazıyı okuduğunuz için teşekkür ederiz!

★ ★ ★ ★ ★