作家
登录

关于ASP.NET内存缓存你需要知道的10点

作者: 来源: 2017-06-23 09:03:19 阅读 我要评论

 void MyCallback(object key, object value, 
  •  
  • EvictionReason reason, object state) 
  •  
  •  
  •     var message = $"Cache entry was removed : {reason}"
  •  
  •     ((HomeController)state). 
  •  
  • cache.Set("callbackMessage", message); 
  •  
  •  
  • 请细心不雅察这段代码。 MyCallback() 是 HomeController 类琅绫擎的一个私有静态函数,它有四个参数。前面两个参数表示方才删除的缓存项的键和值,第三个参数表示的是该数据项被删除的原因。EvictionReason 是一个列举类型,它保护者各类可能的删除原因,如过时,删除以及调换。

    在回调函数的内部,我们会基于删除的原因结垢荷琐字符串消息。我们想要将此消息设置成别的一个缓存项。如许做的话就须要拜访 HomeController 的缓存对象,此时状况参数就可以排上用处了。应用状况对象,你可以对 HomeController 的缓存对象进行控制,并应用 Set() 增长一个 callbackMessage 缓存项。

    你可以经由过程 Show() 这个 action 来拜访到 callbackMessage,如下所示:

    1. public IActionResult Show(){ 
    2.   string timestamp = cache.Get<string>("timestamp"); 
    3.   ViewData["callbackMessage"] =  
    4.     cache.Get<string>("callbackMessage"); 
    5.   return View("Show",timestamp); 
    6.  

    最后就可以在 Show 视图中显示出来了:

    为了测试回调,我们须要运行应用法度榜样并跳转到 /Home/Index。然后跳转到 /Home/Show,并一向地刷新浏览器。在某些时光点,因为其 AbsoluteExpiration 设置之后,时光戳项目将会过时。你会看到如许的 callbackMessage:

    9. 你可以设置缓存项的优先级

    正如你可以设置缓存项的到期策略一样,你还可认为缓存项付与优先级。如不雅办事器内存紧缺的话,就会基于此优先级对缓存项进行清理以收受接收内存。 想要设置优先级的话,就要再一次用到 MemoryCacheEntryOptions。

    1. MemoryCacheEntryOptions options =  
    2.  
    3. new MemoryCacheEntryOptions(); 
    4.  
    5. options.Priority = CacheItemPriority.Normal; 
    6.  
    7. cache.Set<string>("timestamp",  
    8.  
    9. DateTime.Now.ToString(), options);  

    MemoryCacheEntryOptions 的 Priority 属性让你可以应用 CacheItemPriority 列举来设置缓存项的优先级取值。可选的值有 Low,Normal,High 以及 NeverRemove。

    10. 你可以设置多个缓存项之间的依附关系

    1. <h1>TimeStamp : @Model</h1> 
    2.  
    3. <h3>@ViewData["callbackMessage"]</h3> 
    4.  
    5. <h2>@Html.ActionLink("Go back""Index""Home")</h2>  

    你还可以对一组缓存项目之间的依附关系进行设置,例如在删除一个缓存项时,所有依附的项也会被删除。 如果你想要懂得它是若何工作的,可以像下面如许对 Index()这个 action 做一下修改:


      推荐阅读

      Python MySQL数据库连接池组件

    引言pymysqlpool 是数据库对象包中新成员,目标是能供给一个实用的数据库连接池中心件,大年夜而避免在应用中频繁地创建和释放数据库连接资本。功能 连接池本身是线程安然的,可在多线>>>详细阅读


    本文标题:关于ASP.NET内存缓存你需要知道的10点

    地址:http://www.17bianji.com/lsqh/35873.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)