zoukankan      html  css  js  c++  java
  • MVC缓存OutPutCache学习笔记 (二) 缓存及时化VaryByCustom

    <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不同..也会产生不同的缓存实例

     

  • 相关阅读:
    推荐两款好用的反编译工具(Luyten,Jadx)
    在windows上运行linux
    Spring IOC的理解
    Django 13 admin和auth系统、权限问题
    Django 12 中间件、上下文处理器和admin后台
    Django 11 form表单(状态保持session、form表单及注册实现)
    Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)
    Django 09 博客小案例
    Django 解答 01 (pycharm创建项目)
    Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
  • 原文地址:https://www.cnblogs.com/iiwen/p/5142329.html
Copyright © 2011-2022 走看看