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?
özet
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ı:
- _sqlsorgu yürütmek istediğiniz SQL sorgusuna karşılık gelir.
- 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.
- 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.
12345678910111213141516171819202122232425262728iş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çeriyorsaif ($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ı durumundaif ($sonuçlar == boş) {//Verileri alıyoruz$sonuçlar = bu $->konteyner->al("doktrin")->getManager()->getRepository("NamespaceNameBundle:Varlık")->bul();//Önbelleğe alma kimliğimiz varsaif ($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üzdö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!