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技术栈QQ群:384413261

相关文章:

原文:http://www.cnblogs.com/ants/p/8533074.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 



拥抱.NET Core系列:MemoryCache 缓存域相关推荐

  1. 拥抱.NET Core系列:MemoryCache 缓存选项

    MSCache项目 MSCache 目前最新的正式版是 2.0.0,预览版是2.1.0,会与 .NETCore 2.1 一起发布.本篇用了2.0.0版本 开源在 GitHub 上,仓库地址是:http ...

  2. 拥抱.NET Core系列:MemoryCache 缓存过期

    MSCache项目 MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,会与.NETCore 2.1一起发布.本篇用了2.0.0版本 开源在GitHub上,仓库地址是:https://g ...

  3. 拥抱.NET Core系列:MemoryCache 初识

    MSCache能做什么? 绝对过期支持 滑动过期支持(指定一个时间,TimeSpan,指定时间内有被Get缓存时间则顺延,否则过期) 过期回调 自定义过期 MSCache目前最新的正式版是 2.0.0 ...

  4. 拥抱.NET Core系列:依赖注入(2)

    上一篇"拥抱.NET Core系列:依赖注入(1)大体介绍了服务注册.获取和生命周期,这一篇来做一些补充.由于内容跨度大(.NET Core.ASP.NET Core),所以文章并不是非常的 ...

  5. 拥抱.NET Core系列:Logging (1)

    在之前我们简单介绍了 .NET Core 中的 DI组件,没来及了解的童鞋可以翻翻我之前的文章. 接下来会对 .NET Core 中的 Logging 进行介绍. 本文中使用了"Micros ...

  6. 拥抱.NET Core系列:依赖注入(1)

    前言 DIP.IoC.DI 说起DI不得不提IoC这个模式,很多人会把DI和IoC混为一谈,但其实这两者是概念和实现的关系. 依赖倒置原则(DIP):软件设计原则,要依赖于抽象,不要依赖具体实现. 控 ...

  7. .NET Core实践系列之SSO-跨域实现

    前言 接着上篇的<.net core实践系列之SSO-同域实现>,这次来聊聊SSO跨域的实现方式.这次虽说是.net core实践,但是核心点使用jquery居多. 建议看这篇文章的朋友可 ...

  8. .net core实践系列之SSO-同域实现

    前言 SSO的系列还是以.Net Core作为实践例子与大家分享,SSO在Web方面复杂度分同域与跨域.本篇先分享同域的设计与实现,跨域将在下篇与大家分享. 如有需要调试demo的,可把SSO项目部署 ...

  9. Natasha 4.0 探索之路系列(二) 「域」与插件

    域与ALC 在 Natasha 发布之后有不少小伙伴跑过来问域相关的问题,能不能兼容 AppDomain.如何使用 AppDomain.为什么 CoreAPI 阉割了 AppDomain 等一系列的问 ...

最新文章

  1. 目标10亿部?苹果AR眼镜有望明年登场!传搭载Mac级处理器、4K显示屏
  2. 输入网址按回车,到底发生了什么
  3. 「译」在JavaScript中将值转换为字符串的5种方法
  4. Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析
  5. memcached全面剖析--3.memcached的删除机制和发展方向
  6. 使用C++实现YUV格式图像与RGB格式图像之间相互转换
  7. 今天你多态了吗? 【转】
  8. 我在WordCamp上学到的有关新WordPress Gutenberg编辑器的知识
  9. MongoDB高级查询详细
  10. html点击按钮 重新加载页面或者跳转页面实现
  11. mybatis SqlSessionDaoSupport的使用(附代码下载)(转)
  12. 设计模式学习笔记(四)之工厂模式(Factory)
  13. aiml java,聊天机器人与Alice的AIML
  14. 附加:下半部分sql语句 区/县(数据表)
  15. UGUI之菜单动画效果制作思路
  16. java毕业生设计校园线上点餐系统计算机源码+系统+mysql+调试部署+lw
  17. 小程序轮播图_微信小程序层叠轮播图
  18. 笔记-EXCEL 周报制作
  19. 【学习笔记】《基于φ-OTDR的分布式扰动传感系统定位算法研究-北交-通信与信息系统-吴》重点笔记
  20. 验证码之google的reCAPTCHA使用

热门文章

  1. PHP 7.2 新功能介绍
  2. centos6,7的启动流程
  3. NHibernate之旅(7):初探NHibernate中的并发控制
  4. 在web网页中正确使用图片格式
  5. 下载 infoq 网站视频
  6. error LNK2001: unresolved external symbol public: __thiscall CNaDialog::CNaDialog(class CWnd *)
  7. 将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)
  8. NET流行高性能JSON框架-Json.NET
  9. 64位Visual Studio 2022,微软在下一盘大棋!
  10. 听说你刚转了Java?准备转回.NET吧!