ASP.NET Caching in 1.x is very powerful and includes three pieces: output caching, fragment caching, and the cache API. The simplest form, output caching, simply caches the output of a page. Fragment caching is a bit more granular, and caches the output of a user control. Finally, the most powerful caching functionality is achieved using the cache API, and allows any serializable object to be cached. These cached items can then be invalidated based on a certain amount of time, a file or folder dependency, or another cached item. There's also a cached item removed callback function that lets you execute some code after something as been removed from the cache. For more on caching in 1.x, check out this MSDN article:
ASP.NET Caching Techniques and Best Practices (by Steve Smith)