Quali sono i metodi di memorizzazione nella cache, oltre a file o database sono disponibili?

StackOverflow https://stackoverflow.com/questions/4062

  •  08-06-2019
  •  | 
  •  

Domanda

Attualmente conosco solo due modi per memorizzare nella cache i dati (io uso il PHP, ma presumo che lo stesso vale per la maggior parte delle lingue).

  1. Salvare la cache di un file
  2. Salvare la cache in un grande campo DB

Ci sono altri (forse meglio) modalità di memorizzazione nella cache o in realtà è solo questa semplice?

È stato utile?

Soluzione

Forse si vuole esplicito, più precisamente ciò che si desidera memorizzare.È questa l'opportunità di cache:

  • L'accesso ai Dati di Base dove si memorizza nella cache i dati correttamente prima di ottimizzazione di RDBMS, poi con uno strato di delegare la decisione di rilevare più query per i dati stessi (con AdoDB per esempio.)
  • L'estrazione di calcoli dal loop nel codice così non si calcola il valore stesso più volte. Qui il terzo modo:memorizzazione dei risultati della sessione per l'utente.
  • La precompilazione il codice PHP con un'estensione come APC Cache.In questo modo non dovrai compilare lo stesso codice PHP per ogni richiesta.
  • Pagina inviata all'utente assicurarsi che si sta impostando la giusta META tag (fare una cosa buona per il mondo e non utilizzare ETL almeno assolutamente necessario);o, forse, di rendere le pagine dinamiche completamente statico (avendo un processo batch che genera .pagine html);o utilizzando un proxy cache come Calamari.
  • Prelettura e con questo mi riferisco a tutte quelle possibilità che avete per migliorare l'esperienza dell'utente solo facendo le cose, mentre l'utente non guardare la tua strada.Per esempio, il precaricamento i tag IMG in file HTML, tunning RDBMS per prefectching, precomputing risultati memorizzazione di calcoli complessi, nel database, etc.

Dalla mia esperienza, avevo scommesso che il codice può essere migliorata molto prima di iniziare a parlare di memorizzazione nella cache le cose.Si consideri, ad esempio, come è strutturato il sistema di navigazione del sito e come si controlla l'esperienza dell'utente.Quindi controllare il codice con uno strumento come XDebug.

Verificare anche quanto bene stai facendo query SQL, e quanto sei indicizzazione delle tabelle.Quindi, controllare il codice di nuovo a cercare opportunità di applicare la regola "leggere molte volte, ma scrivere solo una volta"

Utilizzare un semplice strumento come YSlow per il suggerimento altre semplici cose da migliorare.Controllare il codice di nuovo in cerca di opportunità di mettere logica nel browser (tramite JavaScript)

Altri suggerimenti

È anche possibile memorizzare nella memoria che è molto più efficiente.Provare memcached.

Il distacco memcached, fa le cose semplici ed è in grado di andare distributiva e tutto ciò che il jazz se avete bisogno di troppo

Se si utilizza Apache, è possibile utilizzare il mod_rewrite per staticamente cache le pagine web.Diciamo che si sta utilizzando PHP, e si dispone di una richiesta di "/somepage.php".Nel vostro .il file htaccess è inserire le seguenti:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Se la cache gira a vuoto, la richiesta viene gestita da script php come al solito, per ora è semplicemente una questione di fare i vostri script php memorizzare il codice html risultante nella cache.Il modo più semplice per farlo è utilizzando un altro htaccess regola da premettere fine aggiungere un paio di php file php richieste (questo potrebbe anche non essere una buona idea, a seconda dell'applicazione):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Quindi devi fare qualcosa di simile a questo:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

Con alcune altre espressioni regolari in .il file htaccess probabilmente potremmo iniziare la memorizzazione nella cache di stringa di query richieste, ma lascio come esercizio per il lettore :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top