Background to question: I'm looking to implement a caching system for my website. Currently we're exploring memcache as a means of doing this. However, I am looking to see if something similar exists for SQL Server. I understand that MySQL has query cache which although is not distributed works as a sort of 'stop gap' measure. Is MySQL query cache equivalent to the buffer cache in SQL Server?

So here are my questions:

1. Is there a way to know is currently
stored in the buffer cache?
2. Follow up to this, is there a way to
force certain tables or result sets
into the cache? How much control do I have over what goes on in the buffer and procedure cache? I understand there used to be a DBCC PINTABLE command but that has since been discontinued.
3. Slightly off topic: Should the
caching even exists on the database
layer? Or it is more prudent to
manage caches using
Velocity/Memcache? Is so, why? It
seems like cache invalidation is
something of a pain when handling
many objects with overlapping
triggers.

Thanks!