> but storing a reference means that what you stick into the cache might not be what you get out as something else modified the model.

Correct, this would have to be a toss up that the developer putting stuff into the cache would have to account for it's importance.

> It also means that anyone using the cache needs to have access to the db, so it needs the db and the cache in order to use it effectively

Only the getter and setter for that key needs access to the db in the example I outlined. So as long as they have access to the cache they have access to everything they need to extract the data.