Most sites will benefit from some form of caching, but for complex sites it is important to make sure the cache backend issuitable for the data you intend to cache.
For example, many others have already discussed the suitability of memory based caching for session data. The problem being that if memory becomes tight session data can be dropped meaning a user can be abruptly logged out of a website unexpectedly.
But where do you send your block data to be cached? Memcached is often used, and is often a great choice. But one thing to check is that you don't have blocks that will exceed that maximum size that each cache item be in memcached.