Or you can use a database where join performance isn't pathological, and scale out by adding read slaves.
Caching is hard. Caching as an automated 'layer' is much harder. If it were possible to cache in a general way databases would do it already. Adding a 'caching layer' is opening a gate into hell. The things is, at first it will be fine. Thousands of engineer hours and hundreds of subtle bugs later, you'll (if you're wise) realize that opening that door let out many demons, you just didn't have the eyes to see them at the time.
"There are only two hard things in Computer Science: cache invalidation and naming things." -- Phil Karlton
This, so much. Caching should never be a "5 minute" thing and should only be considered once all other options are exhausted. Once teams start to go down this road, they should also begin working on a longer-term strategy for denormalization and scalable data storage.
MySQL does already automatically cache queries internally. However, the scale of that caching is limited, in part because it's difficult to scale MySQL horizontally in the same way as Memcached or other distributed caching systems.
Adding read slaves is a great on many levels. Adding slaves, however, is not without overhead and stale data/programming complexity exists there too.
The caching that MySQL does effectively useless unless all of your queries deserve equal priority (times their individual footprint) for memory. That's almost never the case. I don't want relatively low-impact-rare-reads to take up space that I'd prefer to use for high-impact-common-reads, for instance.
It's nice that MySQL caches queries, but it doesn't solve the same problem that an application-level cache does.
Caching is hard. Caching as an automated 'layer' is much harder. If it were possible to cache in a general way databases would do it already. Adding a 'caching layer' is opening a gate into hell. The things is, at first it will be fine. Thousands of engineer hours and hundreds of subtle bugs later, you'll (if you're wise) realize that opening that door let out many demons, you just didn't have the eyes to see them at the time.
"There are only two hard things in Computer Science: cache invalidation and naming things." -- Phil Karlton