首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

拥抱.NET Core系列:MemoryCache 初识

MSCache能做什么?

绝对过期支持

滑动过期支持(指定一个时间,TimeSpan,指定时间内有被Get缓存时间则顺延,否则过期)

过期回调

自定义过期

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

回到目录

从IMemoryCache说起

IMemoryCache 就提供了三个方法并实现了 IDisposable 接口。

很好理解

CreateEntry添加一个缓存

Remove删除一个缓存

TryGetValue获取一个缓存(并可得到具体的缓存是否存在)

ICacheEntry

ICacheEntry 有以上成员,同时实现了 IDisposable 接口,为什么要实现这个接口?用来释放缓存吗?这个在接下来的篇幅会做解释。

Key缓存key

Value缓存值

AbsoluteExpiration绝对过期时间,为null则条件无效

AbsoluteExpirationRelativeToNow相对当前时间的绝对过期时间(使用TimeSpan),为null条件无效

SlidingExpiration滑动过期时间

ExpirationTokens提供用来自定义缓存过期

PostEvictionCallbacks缓存失效回调

Priority缓存项优先级(在缓存满载的时候绝对清除的顺序)

Size代表缓存数据的大小,在内存缓存中一般为null

我们来试试

恩,妥妥的,输出 “True” 和 “1”。

纳尼,居然是“False”和null。

玄学

有些同学可能已经注意到了 ICacheEntry 实现了IDisposable接口。为什么ICacheEntry要实现 IDisposable 接口呢?讲真我也不知道。反正大家知道它是具体像MemoryCache插入缓存的方法就行。

这有点违背了我们之前所学的 IDisposable 用来释放资源的原则。

正确的打开方式

回到目录

开发者的体验

说到底还不是 Set、Add、Get、Remove、Clear ?跟之前差不多啊。

MS团队提供了一个 CacheExtensions 扩展方法类

Get 比较好理解这边不多做累述。

Set 设置一个新的缓存条目(相同key的会被移除)就好像被set的这个key是一个完全新的东西,所以也不会继承之前的过期时间和过期token。

GetOrCreate

基本都用它,我们来看看。

两种方式 GetOrCreate 减少了第一种模式的判断。回调里面的entry就是ICacheEntry可以用来设置缓存的其它选项。

同时在这个Task满天飞的日子里,还提供了了GetOrCreateAsync扩展方法。

回到目录

写在最后

MSCache跟Orchard中的Caching非常的相识,或者说借鉴了Orchard中良好的Caching重构而来。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301B051Q800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券