intanto vedi (se c'è una logica di tipo MVC o similare) se le classi che mappano le tabelle del database hanno una loro cache oppure no, e nel caso implementalo a livello di classi, questo darà già un bel vantaggio ed è anche semplice da realizzare perchè la cache viene invalidata solamente se l'oggetto viene effettivamente modificato

passo successivo sarebbe verificare quali pagine possono essere effettivamente messe in cache, se è meglio fare una cache temporizzata (ovvero viene invalidato il file in cache per quella pagina ad intervalli di tempo regolari) oppure invalidare la cache della pagina quando il relativo oggetto di riferimento viene modificato a sua volta.
Per le pagina dipende da come è organizzato l'output: se viene generato con una serie di print o echo o codice misto html-php (ovvero con codice tipo <?=$title?>) conviene "catturare" tale output con le relative funzioni ( http://www.php.net/manual/en/ref.outcontrol.php ) oppure se bufferizzi l'ouput in una normale variabile php, salvi il contenuto in un file e poi fai print $variabile.