Symfony2: gestire autonomamente la cache
Agenzia web » Notizie digitali » Symfony2: gestire autonomamente la cache

Symfony2: gestire autonomamente la cache

La cache è presente ovunque nell'informatica e fortunatamente altrove. Senza di essa i tempi di elaborazione sarebbero molto più lunghi! In un momento in cui tutti i framework degni di questo nome utilizzano un sistema di cache, perché dovremmo gestire noi stessi la cache?

Cache in Symfony2

In Symfony2, puoi facilmente configurare un sistema di cache. Inoltre, se volessimo essere precisi, sembra che Symfony abbia un proprio sistema di cache (app/cache/ENV/), e che possiamo anche collegare un sistema di cache a livello di server (Apache, IIS, …). Questa cache è completamente gestibile e la memoria è volatile. Non appena il server viene riavviato, la cache del server viene eliminata.

Sistemi di memorizzazione nella cache

Quali sistemi di caching esistono? A memoria, tre programmi escono regolarmente.

  • XCache
  • memcached
  • APC
    APC è ora deprecato da PHP 5.4, quindi non consiglio di provare a collegarlo.

Nel mio caso, userò XCache. Puoi anche trovare il mio post su come installare XCache.

Perché gestire la tua cache da solo

Vedo alcuni commenti che arrivano e chiedono “perché? ". Mentre Doctrine ti consente di usare facilmente la cache tramite il suo metodo useResultCache(uso, ritardo, id). La mia risposta è semplice: fare trattamenti gratuiti.

Un piccolo esempio per darvi qualche idea. Diciamo che sto memorizzando nella cache un elemento da un database. Se modifico questa entità, la cache non verrà aggiornata fino a quando i dati non saranno scaduti. Con una gestione della cache personalizzata, potrò anche prima che la cache raggiunga il tempo assegnato, reimpostare i nuovi dati e sovrascrivere quelli vecchi. Ciò richiede una gestione significativa, ma i guadagni in termini di prestazioni possono essere sostanziali.

Symfony2 e come gestire la propria cache

Ti offro questo piccolo codice memo da gestire facilmente. Nel nostro caso, la funzione di questo Gist mira a restituire il risultato di una query SQL.

Prototipo: funzione execute ($sql_query, $id = null, $delay = 3600);
impostazioni:

  1. _sqldomanda corrisponde alla query SQL che si desidera eseguire.
  2. id è l'identificatore associato ai dati memorizzati nella cache. Per un ID x, avrai un contenuto x.
  3. ritardo è il tempo massimo che dai alla cache sarà valido. Per impostazione predefinita, 3600 secondi. Ciò significa che dopo aver memorizzato nella cache i tuoi dati, saranno disponibili per 3600 secondi.
    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
    function eseguire ($sql_query, $id = null, $delay = 3600)
    {
    // Dichiariamo un'istanza cache
    $ driver cache = nuovi DoctrineCommonCacheXcacheCache();
    $risultati = nullo;
    //Se è stato immesso un ID e il sistema di cache contiene i dati per un ID "x"
    if ($id!= nullo && $cacheDriver->contiene($id)) {
    //Quindi prendiamo i dati memorizzati nella cache per un ID "x"
    $results = $cacheDriver->fetch($id);
    }
    //Se non ci sono dati, nel caso in cui i dati memorizzati nella cache siano uguali a null
    if ($risultati == nullo) {
    //recuperiamo i dati
    $risultati = $ This->contenitore->prendi("dottrina")->getManager()->getRepository("NamespaceNameBundle:Entità")->trovaTutto();
    //Se abbiamo un ID di memorizzazione nella cache
    if ($id!= nullo) {
    //Salviamo i dati per un ID x e per un ritardo y
    $cacheDriver->save($id, $results, intval($delay));
    }
    }
    //Restituiamo i risultati limitando le richieste future
    ritorno $risultati;
    }

Bene, spero che questo promemoria ti aiuti. A presto e grazie per aver letto questo post!

★ ★ ★ ★ ★