Get:获取key=name的value
GetOrCreate,GetOrCreateAsync:如果key=name的value存在,则获取,不存在则设置一对新的
Set:设置key=name的value
TryGetValue:判断key=name是否存在,存在则返回true,不存在则返回false。同时将结果赋给一个值。
没有该key则结果为null
存在则获取该值
不存在则新设置一个值,并返回该值
返回bool。存在则将value赋值给def,不存在则为空。
SlidingExpiration:滑动过期时间,如果一个值在滑动过期时间没有被访问,则置为空。如果期间被访问,则重置该时间。
AbsoluteExpiration:绝对过期时间,不论有没有被访问,到时间都会过期。
Priority:优先级,只在内存有压力时,被清理的优先级,数字越大,越不会被清理
设置缓存大小,这个大小是没有单位的,或者说这个单位是自定义的。
如果设置了这个Limit的值,则每次设置缓存的时候都必须设置Size大小,这个Size的增长幅度是自定义的,可以是一条,也可以是每条的大小。
当缓存的内容达到了这个大小,再添加值的话,则按照如下的顺序删除缓存
所有过期的项
按照优先级排序。删除优先级低的
最近最少使用的项
绝对过期的项
具有最早的可调过期项的项
删除某百分比的缓存
//memoryCache的类型是MemoryCache而不是IMemoryCache memoryCache.Compact(.33);只要实现了IChangeToken的类都可以,当HasChanged变为true时,缓存过期。
1.被引用的缓存过期,则调用的缓存也会过期
public IActionResult Set(string name,string value) { memoryCache.GetOrCreate("a", entry => { entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20); return new A() { B= Fun(), Location = "1", Country = "zhang" }; }); return Ok(); } public B Fun() { return memoryCache.GetOrCreate("b",entry=> { entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(10); return new B() { Age = 1, Name = "zhang" }; }); }2.父子
private int Fun() { return memoryCache.GetOrCreate("a", entry => { return memoryCache.GetOrCreate("b", ce => { ce.AddExpirationToken(new CancellationChangeToken(cts.Token)); return DateTime.Now.Second; }); }); }
