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.
It's nice that MySQL caches queries, but it doesn't solve the same problem that an application-level cache does.