.NET Core系列之MemoryCache 缓存域

 更新时间:2018年08月14日 14:46:00   作者:KAnts  
这篇文章主要介绍了.NET Core系列之MemoryCache 缓存域,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在上一篇“《拥抱.NET Core系列:MemoryCache 缓存选项》”我们介绍了一些 MSCache 的机制,今天我们来介绍一下 MSCache 中的缓存域。

MSCache项目

MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布。本篇用了2.0.0版本

开源在 GitHub 上,仓库地址是:https://github.com/aspnet/Caching

NuGet地址为:https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/2.0.0

缓存域

我们来假设一个场景。

有下面四个成员

  1. 书籍模型(包含一个组章节模型)
  2. 章节模型
  3. 书籍服务
  4. 章节服务

BookService 有一个获取书籍的方法

ChapterService 有一个获取书籍章节的方法

可以看到 GetBook 内使用了缓存,缓存了5秒钟。GetBook 又调用了 ChapterService 的 GetChapters,GetChapters 缓存了3秒钟。

这时候书籍的章节信息缓存要早于书籍过期。

那么大家试想一下,如果章节信息先过期了 GetBook 这个方法返回的是不是还是旧的数据?

在一些简单的缓存设计中是这样的,但在 MSCache 中微软提供了缓存域的概念,从层级上 Chapter 的父级缓存是 Book。所以当 Chapter 过期时,Book 也会级联过期。

我们来看一下测试。

可以看到,每隔三秒钟不仅 Chapter 重新获取,Book 也会一起级联获取。

这样在很大程度上减轻了我们处理缓存依赖的问题。

ChaneToken在域中

SlidingExpiration在域中(画重点)

恩,输出是 时间,时间,新时间。

其实呢?

子缓存项并没有过期。

这是为什么呢?我翻了 Caching 的源码发现,缓存失效扩散的处理中,并没有对 SlidingExpiration 进行处理,只处理了 ExpirationTokens 和 AbsoluteExpiration。

不知道这是不是一个bug,我已经在 MSCache 项目上提了一个issue,等待回复后再来更新这块的说明。

这块的处理代码如下:

逻辑很简单,把自身的过期 token 和 绝对过期时间 设置在父缓存项上。

也就是说你在父缓存中设计的绝对到期时间会被改写成到期缓存域中最小的到期时间。

写在最后

MSCache 真的非常像 Orchard 中的 Caching,有兴趣的同学可以去了解一些 Orchard 中的 Caching 设计。

至 此 MSCache 中的 MemoryCache 机制和功能就基本介绍完了。

后续会继续介绍 MSCache 中的 DistributedCache(分布式缓存),和一些 MSCache 的使用技巧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • .NET桥接模式讲解

    .NET桥接模式讲解

    这篇文章主要为大家详细介绍了ASP.NET桥接模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • asp.net检查服务器上目录或文件是否存在的方法

    asp.net检查服务器上目录或文件是否存在的方法

    这篇文章主要介绍了asp.net检查服务器上目录或文件是否存在的方法,主要通过asp.net的System.IO.File.Exists与System.IO.Directory.Exists来实现,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • C# 判断两张图片是否一致的快速方法

    C# 判断两张图片是否一致的快速方法

    这篇文章主要介绍了C# 判断两张图片是否一致的快速方法,需要的朋友可以参考下
    2014-03-03
  • ASP.NET MVC 4使用PagedList.Mvc分页的实现代码

    ASP.NET MVC 4使用PagedList.Mvc分页的实现代码

    本篇文章主要介绍了ASP.NET MVC 4使用PagedList.Mvc分页的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 在.NET Web API设置响应输出Json数据格式常用的两种方式详解

    在.NET Web API设置响应输出Json数据格式常用的两种方式详解

    在ASP.NET Core Web API中设置响应输出Json数据格式常用以下两种方式:可以通过添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式,本文示例使用的是新的Minimal API模式,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 伪静态web.config配置步骤

    伪静态web.config配置步骤

    web.config是asp.net一个重要的配置文件,本文将介绍如何利用web.config配置伪静态,步骤很详细,需要了解的朋友可以参考下
    2012-12-12
  • Jwt通过源码揭秘隐藏大坑

    Jwt通过源码揭秘隐藏大坑

    今天分享一下在使用JWT在项目中遇到的一个问题,主要是一个协议的细节,非常容易被忽略,如果不是自己遇到,或者去看源码的实现,我估计至少80%的人都会栽在这里,下面来还原一下这个问题的过程,由于这个问题出现有一定的概率,不是每次都会出现,所以才容易掉坑里
    2022-05-05
  • .net core EF Core调用存储过程的方式

    .net core EF Core调用存储过程的方式

    这篇文章主要给大家介绍了关于.net core EF Core调用存储过程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.net core EF Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • asp.net(c#)判断远程图片是否存在

    asp.net(c#)判断远程图片是否存在

    不错的应用,大家可以拓展到,判断远程文件是否存在等功能
    2008-09-09
  • ASP.NET使用gridview获取当前行的索引值

    ASP.NET使用gridview获取当前行的索引值

    这篇文章主要介绍了ASP.NET使用gridview获取当前行的索引值的方法汇总,有需要的小伙伴可以参考下。
    2015-06-06

最新评论