Most Application Developers do not know how to design scalable databases. So we end up seeing caches between the Application and the Database. When that particular silver bullet doesn't work as well as we'd like, we now see the NoSQL generation of solutions.
While caching and using NoSQL database for non-relational data makes sense, it's doesn't replace a proper database design. Design the database correctly. Code using set-based logic and you'll scale.