Symfony2: vahemälu ise haldamine
Vahemälu on arvutis kõikjal ja õnneks ka mujal. Ilma selleta oleks töötlemisaeg palju pikem! Miks peaksime ajal, mil kõik nime väärivad raamistikud kasutavad vahemälusüsteemi, vahemälu ise haldama?
kokkuvõte
Vahemälu Symfony2-s
Symfony2-s saate hõlpsasti seadistada vahemälusüsteemi. Pealegi, kui tahtsime olla täpne, siis tundub, et Symfonyl on oma vahemälusüsteem (app/cache/env/) ja et saame ühendada ka vahemälusüsteemi serveri tasemel (Apache, IIS jne). See vahemälu on täielikult hallatav ja mälu on muutlik. Niipea kui server taaskäivitatakse, kustutatakse serveri vahemälu.
Vahemälusüsteemid
Millised vahemälusüsteemid on olemas? Mälu järgi kerkib regulaarselt esile kolm programmi.
- XCache
- Mälestatud
- APC
APC on nüüd vananenud alates PHP 5.4-st, nii et ma ei soovita proovida seda ühendada.
Minu puhul kasutan XCache'i. Leiate ka minu postituse XCache'i installimise kohta.
Miks hallata vahemälu ise?
Ma näen, et mõned kommentaarid tulevad ja küsivad "miks? ". Kuigi Doctrine võimaldab teil oma meetodi kaudu vahemälu hõlpsalt kasutada useResultCache(kasutus, viivitus, id). Minu vastus on lihtne: teha tasuta ravi.
Väike näide ideede andmiseks. Oletame, et salvestan üksuse andmebaasist vahemällu. Kui ma seda olemit muudan, ei värskendata vahemälu enne, kui andmed on aegunud. Isikupärastatud vahemäluhalduse abil saan uued andmed uuesti seadistada ja vanad üle kirjutada juba enne, kui vahemälu saab määratud aja jooksul. See nõuab märkimisväärset juhtimist, kuid jõudluse kasv võib olla märkimisväärne.
Symfony2 ja kuidas oma vahemälu hallata
Pakun teile seda väikest memokoodi, mida saate hõlpsalt hallata. Meie puhul on selle Gisti funktsiooni eesmärk SQL-päringu tulemuse tagastamine.
Prototüüp: funktsiooni käivitamine ($sql_query, $id = null, $delay = 3600);
Seaded:
- _sqlpäringu vastab SQL-päringule, mida soovite täita.
- id on vahemällu salvestatud andmetega seotud identifikaator. ID x korral on teil sisu x.
- viivitus on maksimaalne vahemälu kehtivusaeg. Vaikimisi 3600 sekundit. See tähendab, et pärast andmete vahemällu salvestamist on need saadaval 3600 sekundit.
12345678910111213141516171819202122232425262728funktsioon täitma ($sql_query, $id = null, $delay = 3600){// Me deklareerime vahemälu eksemplari$cacheDriver = uus DoctrineCommonCacheXcacheCache();$tulemused = tühjaks;//Kui sisestati ID ja vahemälusüsteem sisaldab andmeid ID "x" jaoksif ($id!= tühjaks && $cacheDriver->contains($id)) {//Seejärel võtame vahemällu salvestatud andmed ID "x" jaoks$tulemused = $cacheDriver->fetch($id);}//Kui andmeid pole, juhul kui vahemällu salvestatud andmed on nulliga võrdsedif ($tulemused == tühjaks) {//Toome andmed alla$tulemused = $ see->konteiner->hangi("doktriin")->getManager()->getRepository("NimeruumNameBundle:Entity")->leia kõik();//Kui meil on vahemällu salvestamise IDif ($id!= tühjaks) {//Salvestame andmed ID x ja viivituse y jaoks$cacheDriver->save($id, $results, intval($delay));}}//Tagastame tulemused, piirates tulevasi taotlusitagasipöördumine $tulemused;}
Loodan, et see memo aitab teid. Kohtumiseni ja täname, et lugesite seda postitust!