温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在.NET Core中使用MemoryCache 实现缓存域

发布时间:2021-06-07 17:48:47 来源:亿速云 阅读:182 作者:Leah 栏目:开发技术

这篇文章将为大家详细讲解有关怎么在.NET Core中使用MemoryCache 实现缓存域,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

缓存域

有下面四个成员

  1. 书籍模型(包含一个组章节模型)

  2. 章节模型

  3. 书籍服务

  4. 章节服务

怎么在.NET Core中使用MemoryCache 实现缓存域

BookService 有一个获取书籍的方法

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

怎么在.NET Core中使用MemoryCache 实现缓存域

怎么在.NET Core中使用MemoryCache 实现缓存域

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

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

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

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

我们来看一下测试。

怎么在.NET Core中使用MemoryCache 实现缓存域

怎么在.NET Core中使用MemoryCache 实现缓存域

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

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

ChaneToken在域中

怎么在.NET Core中使用MemoryCache 实现缓存域

怎么在.NET Core中使用MemoryCache 实现缓存域

SlidingExpiration在域中(画重点)

怎么在.NET Core中使用MemoryCache 实现缓存域

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

其实呢?

怎么在.NET Core中使用MemoryCache 实现缓存域

子缓存项并没有过期。

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

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

这块的处理代码如下:

怎么在.NET Core中使用MemoryCache 实现缓存域

关于怎么在.NET Core中使用MemoryCache 实现缓存域就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI