<MVC缓存OutPutCache学习笔记 (一) 参数配置>

本篇来介绍如何使用 VaryByCustom参数来实现缓存的及时化..

根据数据改变来及时使客户端缓存过期并更新..

首先更加上一篇中的配置..要在 Global.asax文件中重写 HttpApplication.GetVaryByCustomString 方法..

同一个Action会因为访问参数不同而建立多个缓存..这些缓存会在重写的GetVartByCustomString方法中得到一个字符串.. 这个字符串和这个缓存形成对应关系..类似与键值对..

当下次访问同一类别同一参数同一缓存时..会先调用GetVaryByCustomString()方法..如果得到的字符串与上次不一样了..则会丢弃缓存..执行Action里的逻辑重新生成缓存..

上代码:

  Controller:

        [OutputCache(CacheProfile = "goodsInfo")]
public ActionResult Index()
{
Response.Cache.SetOmitVaryStar(true);
return View();
}

Global.asax

public override string GetVaryByCustomString(HttpContext context, string custom)
{
//这里的Custom参数传递的就是Action上VaryByCustom参数的值 goodsList
//一般底下都会用witch的..这里就不麻烦了 ..
if (custom.ToLower() == "goodsList")
{
return ""; //"这个字符串会与当前action的缓存对应..字符串一改变..缓存就会被丢弃.";
}
return base.GetVaryByCustomString(context, custom);
}

仔细看上边的备注就应该能够明白这里边流程是怎么走的..不懂的往下看..

以上得出..缓存机制的运行顺序应该是这样的(觉得不对的..请留言..我们讨论一下):第一次访问 /Home/Index

Action 读取..执行逻辑..渲染页面..
执行Global.asax中的重写方法 GetVaryByCustomString(HttpContext context, string custom) 得到一个值..发现配置方式为 varyByCustom 参数为 goodsList..
在 GetVaryByCustomString方法中执行得到一个string..程序会记录下来与该试图做个对应..流程结束
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二次访问的时候..程序会先执行 GetVaryByCustomString得到最后的值会与第一次时得到的比对..一样就返回缓存..不一样..就丢弃原有缓存..重新执行Action并缓存结果输出..
最终结果..只要控制了每一个action缓存返回的结果..就可以做到缓存的更新..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
另外备注一点..
OutPutCache默认会根据参数不同产生不同的缓存..所以..在上述的过程中..即使vartByCustom的参数都是goods.. 但是后边ID不同..也会产生不同的缓存实例

 

MVC缓存OutPutCache学习笔记 (二) 缓存及时化VaryByCustom的更多相关文章

  1. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  2. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  3. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  4. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  7. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  8. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  9. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

随机推荐

  1. 控件 UI: VisualState, VisualStateManager, 控件的默认 UI

    VisualState 和 VisualStateManager 控件的默认 Style, ControlTemplate, VisualState 示例1.演示“VisualState 和 Visu ...

  2. vim选中字符复制/剪切/粘贴

    转载自:http://www.cnblogs.com/luosongchao/p/3193153.html 问题描述: vim 中选中指定字符,进行复制/剪切/粘贴 选择:1.普通模式下--v+hjk ...

  3. XHTML与HTML的区别

    XHTML:可扩展超文本标记语言,是一种置标语言,表现方式与超文本标记语言(HTML)类似,不过语法上更加严格. 参考:http://baike.baidu.com/search/word?word= ...

  4. Uva1398 Meteor

    扫描线法. 将流星出现在相机里的时间转化成线段,离散化端点后,扫描何时出现的流星最多.注意边界的不算,所以要先减右端点再加左端点 /*By SilverN*/ #include<iostream ...

  5. Security configuration of SSH login entry - enterprise security practice

    catalog . 引言 . 修改ssh端口 . 禁用root远程ssh登录 . 只使用SSH v2 . 限制用户的SSH访问 . 禁用.rhosts文件 . 禁用基于主机的身份验证 . 基于公私钥的 ...

  6. dedecms /install/index.php.bak Installation File Not Deleted && Executed Via Apache Analytic Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 概括梳理一下这个漏洞的成因 . dedecms默认情况下安装完成之后,i ...

  7. Sublime Text以及Package Control安装方法

    官方下载:Sublime Text 中国论坛:Sublime 论坛 Sublime Text 是一个代码编辑器,具有漂亮的用户界面和强大的功能,并且它还是一个跨平台的编辑器,同时支持Windows.L ...

  8. 使用面向对象对XML进行解析:dom和dom4j的用法

    这是一个比较简单的例子,主要是运用面向对象的思想,对XML文件进行解析,用dom和dom4j方法 <?xml version="1.0" encoding="utf ...

  9. iocp还是select

    上一个项目libevent应该是select,现在libuv是iocp,都知道Windows下iocp比select效率高,boost asio 也是iocp,但具体使用select和iocp发现没有 ...

  10. delphi SQL操作

    create表 时不可以有类似Name之类的字段创建,否则报错,即使access数据库中执行正常   insert的字符型字段中不可以有英文单引号 ' 之类的存在,否则报错,可以用#39 代替,减少英 ...