Symfony2: samostalno upravljajte predmemorijom
Predmemorija je prisutna posvuda u računalstvu, a na sreću i drugdje. Bez njega bi vrijeme obrade bilo puno dulje! U vrijeme kada svi okviri dostojni tog imena koriste sustav predmemorije, zašto bismo morali sami upravljati predmemorijom?
Sommaire
Predmemorija u Symfony 2
U Symfony2 možete jednostavno postaviti sustav predmemorije. Osim toga, ako želimo biti točni, izgleda da Symfony ima vlastiti sustav predmemorije (app/cache/eNV/), te da također možemo uključiti cache sustav na razini poslužitelja (Apache, IIS, …). Ova predmemorija je potpuno upravljiva, a memorija je nepostojana. Čim se poslužitelj ponovno pokrene, predmemorija poslužitelja se briše.
Sustavi predmemoriranja
Koji sustavi predmemoriranja postoje? Po sjećanju redovito se pojavljuju tri programa.
- XCache
- Memorirano
- APC
APC je sada obustavljeno od PHP 5.4, pa ne preporučujem da ga pokušate uključiti.
U mom slučaju, koristit ću XCache. Također možete pronaći moj post o tome kako instalirati XCache.
Zašto sami upravljati predmemorijom
Vidim nekoliko komentara koji dolaze i pitaju se "zašto? ". Dok vam Doctrine omogućuje jednostavno korištenje predmemorije putem njezine metode useResultCache(koristi, kašnjenje, id). Moj odgovor je jednostavan: raditi besplatne tretmane.
Mali primjer koji će vam dati neke ideje. Recimo da predmemoriram stavku iz baze podataka. Ako izmijenim ovaj entitet, predmemorija se neće ažurirati dok podaci ne isteknu. S personaliziranim upravljanjem predmemorije, moći ću ponovno postaviti nove podatke i prebrisati stare čak i prije nego što predmemorija dosegne dodijeljeno vrijeme. To zahtijeva značajno upravljanje, ali dobici u izvedbi mogu biti značajni.
Symfony2 i kako upravljati vlastitom predmemorijom
Nudim vam ovaj mali memo kod za jednostavno upravljanje. U našem slučaju, funkcija ovog Gista ima za cilj vratiti rezultat SQL upita.
Prototip: izvršavanje funkcije ($sql_query, $id = null, $delay = 3600);
Postavke:
- _sqlpitanje odgovara SQL upitu koji želite izvršiti.
- id je identifikator vezan za podatke u predmemoriji. Za ID x, imat ćete sadržaj x.
- odgoditi je maksimalno vrijeme koje će predmemorija biti važeća. Prema zadanim postavkama, 3600 sekundi. To znači da će vaši podaci nakon predmemoriranja biti dostupni 3600 sekundi.
12345678910111213141516171819202122232425262728funkcija izvršiti ($sql_query, $id = null, $delay = 3600){// Deklariramo instancu predmemorije$cacheDriver = novi DoctrineCommonCacheXcacheCache();$rezultati = nula;//Ako je ID unesen i sustav predmemorije sadrži podatke za ID "x"if ($id!= nula && $cacheDriver->contains($id)) {//Tada uzimamo predmemorirane podatke za ID "x"$rezultati = $cacheDriver->fetch($id);}//Ako nema podataka, u slučaju da su predmemorirani podaci jednaki nuliif ($rezultati == nula) {//Dohvaćamo podatke$rezultati = $ ta->kontejner->get("doktrina")->getManager()->getRepository("NamespaceNameBundle:Entity")->nađiSve();//Ako imamo ID predmemoriranjaif ($id!= nula) {//Podatke spremamo za ID x i za odgodu y$cacheDriver->save($id, $results, intval($delay));}}//Vraćamo rezultate ograničavanjem budućih zahtjevapovratak $rezultati;}
Pa, nadam se da će vam ovaj dopis pomoći. Vidimo se uskoro i hvala vam što čitate ovaj post!