Ecco una cosa sorprendente quando si tratta di PHP e MySQL (non sono sicuro di altri linguaggi) - non memorizzare nella cache le cose in memcached o Redis è in realtà più veloce. Più veloce. Fondamentalmente, se hai appena creato la tua app e interrogato MySQL, ne otterresti di più.
Ora per la parte "perché".
InnoDB
, il motore predefinito, è un motore eccezionale. In particolare, la gestione della memoria (allocazione e altro) è superiore a qualsiasi soluzione di archiviazione della memoria. Questo è un dato di fatto, puoi cercarlo o credermi sulla parola:avrà almeno le stesse prestazioni di Redis.
Ora cosa succede nella tua app:esegui una query su MySQL e memorizza nella cache il risultato in redis. Tuttavia, MySQL è anche abbastanza intelligente da mantenere i risultati nella cache. Quello che hai appena fatto è creare un descrittore di file aggiuntivo necessario per connettersi a Redis. Hai anche utilizzato un po' di memoria (RAM) per memorizzare nella cache il risultato che MySQL ha già memorizzato nella cache.
Ecco un'altra parte interessante:il modo preferito per servire gli script PHP è usare php-fpm
- è molto più veloce di qualsiasi mod_*
merda là fuori. Fino al cuore, php-fpm
è un processo supervisore che genera processi figlio. Non si spengono dopo che lo script è stato servito, il che significa che memorizzano nella cache le connessioni a MySQL:si connettono una volta, usano più volte. Fondamentalmente, se servi gli script usando php-fpm
, riutilizzeranno la connessione già stabilita a MySQL, il che significa che non aprirai e chiuderai connessioni per ogni richiesta:questo è estremamente amichevole in termini di risorse e ti consente di avere una connessione velocissima a MySQL. MySQL, essendo efficiente in termini di memoria e avendo il risultato memorizzato nella cache, è molto più veloce di Redis.
Ora cosa significa tutto questo per te:avere una configurazione corretta ti consente di avere un piccolo codice semplice, facile, non coinvolge Redis ed elimina tutti i problemi che potresti avere con l'invalidazione della cache e cosa no e non sprecherai la tua memoria per contenere gli stessi dati due volte.
Ingredienti necessari per farlo funzionare:
php-fpm
MySQL
eInnoDB
tabelle basate e soprattutto - RAM sufficiente einnodb_buffer_pool_size
ottimizzato variabile. Quello controlla quanta RAM InnoDB può allocare per i suoi scopi:più grande è, meglio è.
Hai eliminato Redis dal gioco, hai mantenuto il tuo codice semplice e facile da mantenere, non hai duplicato i dati, non hai introdotto un sistema aggiuntivo per il gioco e hai lasciato che il software che si occupava dei dati facesse il suo lavoro. Un compromesso piuttosto economico per la massima utilità, anche se compili tutto il software da zero:non ci vorrà più di un'ora circa per farlo funzionare.
Oppure puoi semplicemente ignorare ciò che ho scritto e cercare una soluzione utilizzando Redis.