<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. Mysql-ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

    方法一:1.关闭mysql   # service mysqld stop2.屏蔽权限   # mysqld_safe --skip-grant-table   屏幕出现: Starting demo ...

  2. python3.x + selenium 3.x 遇到的问题:Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x0045E450>>

    我解决了!!!from selenium import webdriverimport timedr = webdriver.Firefox(executable_path = '/Users/jin ...

  3. js调用浏览器打印

    <input type="button" id="print" onclick="printdiv('list');" value=& ...

  4. extract()函数

    extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值 extract($_POST);//相当于$username = $_POST['username'];//$passwo ...

  5. 用select实现监控终端输入

    首先,从man手册里找到对select函数的描述,如下: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptf ...

  6. UDP编程中client和server中使用recvfrom和sendto的区别

    client中:      sendto(sfd,buf,strlen(buf),0,(struct sockaddr *)&saddr,len);      recvfrom(sfd,buf ...

  7. bzoj 1030 fail树dp

    dp[i][j][0]代表当前匹配到i号点走了j步且没到过单词节点,1代表到过,直接转移. #include<iostream> #include<cstdio> #inclu ...

  8. 【BZOJ-2436】嘉年华 DP + 优化

    2436: [Noi2011]Noi嘉年华 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 529  Solved: 382[Submit][Statu ...

  9. 订阅Jenkins的邮件列表,获取最新的信息

    进入https://jenkins.io/content/mailing-lists/ 点击感兴趣的话题 选择[archive]跳转到谷歌讨论组 最后,点击左上角的[Subscribe]即可加入Goo ...

  10. asp.net生产环境和开发环境的错误日志包装策略

    对于错误日志的输出,我们借助web.config的两个标志位: <!--全局包装异常处理页面,只有在PageError和Application_Error做清除错误操作才可不跳转--> & ...