La tua è una domanda molto generica. Parti da "Che cos'è la cache?", cerca qualche articolo sul web, e inizia da lì. Generalmente un'applicazione ha tanti livelli/strati di cache. C'è il caching con http, che ti permette di alleggerire il carico sulla rete e di migliorare le prestazioni. La tua pagina web può essere messa in cache interamente, in modo che se l'utente la richiede una seconda volta non andrà più a richiedere il contenuto alla tua applicazione. Oppure, se la pagina è molto dinamica, può usare ESI per mettere in cache solo alcuni frammenti. Può utilizzare un reverse proxy come Varnish Cache per ridurre il carico del server (vedi https://en.wikipedia.org/wiki/Web_accelerator) e utilizza un CDN per il caching delle risorse statiche come immagini, fogli di stile, js, etc. Già qui abbiamo parlato di due differenti tipi di cache: quella del browser e quella del proxy.
Frequentemente l'utilizzo di un RDBMS è IL collo di bottiglia per eccellenza, e solitamente aiuta usare soluzioni come quelle fornite da redis/memcache per salvare i risultati delle query (e non solo), in modo da non andare a colpire il database ogni volta che ti serve leggere certi dati. Ma anche il db ha la sua cache, ad esempio per mysql-InnoDB: https://dev.mysql.com/doc/refman/5.5...ffer-pool.html
In PHP puoi sentire parlare di "APC bytecode cache", che non è altro che l'opcode messo in memoria, con cui puoi evitare compilazioni ridondanti dei tuoi script (ormai è una funzione attiva di default).
Insomma, non esiste il bottone magico su cui c'è scritto "Cache: ON!", o una voce nella configurazione di php "Ottimizza_la_mia_applicazione: true", o una libreria che si chiama "Risorse_illimitate 2.0" che puoi installare sul server, e con il quale puoi fare in modo che la tua applicazione, che prima reggeva i suoi 100 visitatori giornalieri, riesca a reggerne 1 milione dall'oggi al domani, o che riesca a gestire un enorme quantitativo di dati.