Puedes hacer algo conjunto, si usas algo como mem_cache, puedes guardar los datos en un cache en memoria, algo que es muy rápido y efectivo, pero cuando hagan algún update a los datos del usuario, "borras" la entrada del cache.
Luego en tu código checas, que si no existe los datos en la sesión, los lea de la BDD y los inserte en el cache, así tienes lo mejor de los dos mundos