The Reluctant Cache Pattern is susceptible to stampeding requests, especially if retrieving the data takes a long time.
I'd never use the ASP.NET cache anyhow. A distributed cache with a near/far cache mechanism makes the RCP irrelevant.
The session viewstate example is hopelessly useless. ASP.NET 2.0 comes with a SessionPageStatePersister type. And there's way easier and much better ways to override the default page viewstate persister than the terribly outdated example given.