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

     

  • 相关阅读:
    js中给一个元素添加事件
    asp.net客户端回调
    (转)web元素之input (javascript)功能
    在wcf中使用基于证书的授权和保护
    (转)IE与FireFox的js和css几处不同点
    IE&FF兼容性问题
    solaris UFS文件系统 要点
    perl命令行 代替 各种shell 一则
    nginx中的验证模块
    漂亮的正则,素数查找
  • 原文地址:https://www.cnblogs.com/iiwen/p/5142329.html
Copyright © 2020-2023  润新知