[转载]ASP.NET MVC 1.0,静态化缓存 和 OutputCache

baacloud免费翻墙vpn注册使用

[转载]ASP.NET MVC 1.0,静态化缓存 和 OutputCache – 天空站长教程网 | 天空站长学编程,学习,考试,认证的最佳网站 – www.qzsou.cn.

静态化缓存 和 OutputCache 不同,它适用于那些有大量可访问页面(的)网站(比如新闻站点)。要知道我们(的)网站每天都会被(很)多智商不高(的)傻蜘蛛和灌水机做全身检查,这些 家伙往往会深度遍历 n 多(的)页面,(很)容易导致我们有限(的) “动态缓存” 被频繁刷新,失去了缓存应有(的)价值。还有一点,静态缓存往往独立存储,可以(是)多台 Memchaced 或者 DFS 系统,如此在一个负载均衡环境里,这种跨进程和机器(的)缓存模式会更有效。

我们首先定义一个缓存接口,以便日后可以实现多种缓存策略。

public interface IStaticCache
{
  void Set(string key, object value, DateTime absoluteExpiration);
  void Set(string key, object value, TimeSpan slidingExpiration);
  T Get<T>(string key);
  void Delete(string key);
}

  接下来,我们要拦截 ActionResult Render 输出,将其保存到缓存中,并在下一次访问时使用。原理(很)简单,(就是)调用 Response.SwitchWriter 更换输出器。

public sealed class HttpResponse
{
  internal TextWriter SwitchWriter(TextWriter writer)
  {
    TextWriter writer2 = this._writer;
    this._writer = writer;
    return writer2;
  }  
}

  虽然(是) internal,用反射还(是)(很)容易达成目(的)。

private TextWriter SwitchWriter(TextWriter writer)
{
  var method = typeof(HttpResponse).GetMethod("SwitchWriter", 
    BindingFlags.NonPublic | BindingFlags.Instance);
  return method.Invoke(HttpContext.Current.Response, new object[] { writer }) as TextWriter;
}
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏