Hola Alberto,
El caché de base de datos lo puedes gestionar directamente con el motor de base de datos que utilices (entiendo que es mysql). Para activarla, puedes hacerlo de dos formas:
- a nivel global en el archivo de configuración del mysql (my.cnf). De este modo, se cachean todas las consultas (en realidad, sólo las de lectura SELECT)
- directamente en la query, lo que te permite elegir qué consultas cacheas. Así, en una query del tipo SELECT * FROM mytable WHERE ..., deberías poner SELECT SQL_CACHE * FROM mytable WHERE ...
En la caché de páginas, yo utilizaría Smarty o Twig, pocas veces sale a cuenta reinventar la rueda, a no ser que tengas muy claro que necesitas algo que no está implementado, o tengas ganas de hacerlo.
Smarty te permite cachear a nivel de página, de modo que puedes elegir qué cacheas y qué no. Además, puedes establecer cuánto tiempo queda cacheado el contenido. Si por ejemplo, hay contenidos dinámicos que cambian con poca frecuencia (ej. un precio que cambia sólo varias veces al año), puedes cachear la página por horas o días. Si es una página con un listado en el que se añaden items cada pocos minutos, puedes cachearla sólo durante 2 o 3 minutos. Así, pasas de hacer una consulta cada vez que haya una visita a la página, a hacer una cada 2 o 3 minutos. Que el contenido quede "congelado" durante ese tiempo no suele ser demasiado crítico, y la descarga de trabajo al servidor es bestial, especialmente en términos de concurrencia.
Smarty hace la gestión del caché con archivos en disco, pero también puedes configurarlo para que deje los archivos en RAM, utilizando memcache.
Saludos!