缓存:一种快速获取数据的技术;
1,把耗费大量资源或时间获取的数据,存放在一个能够快速获取的地方(缓存区);
2,这样下次就可以直接在缓存区内快速获取;
常用于CPU,浏览器,数据库;
为啥能快取?
1,存储位置不同,如:本地比服务器快,内存比磁盘快;
2,不用计算:把上次计算结果直接存放,下一次直接取;
缓存区的数据设置过期时间:
1,永不过期:和项目运行周期一致
2,绝对过期时间(常用):在设置的过期时间前有效,简单粗暴;
3,滑动过期时间:最后一次访问算起,到设置的过期时间结束,类似session失效机制;
有效期内的缓存也会被ASP.NET(Framework)或被开发人员(Core)自定义清除:
因缓存要消耗更多的内存,ASP.NET或开发人员会进行一些调整,当内存消耗很多,进而影响性能时(缓存不一定越多越好),会自动清理缓存(按设置的优先级清理);
.NET Core不会自动清理,所以需要开发人员自行限制缓存容量;
MVC中缓存:
public ActionResult Index()
{
string cacheKey="小王";
//先去缓存中取数据
IndexModel model=HttpCotext.Cache.Get(cacheKey) as IndexModel;
if(model==null)
{
//从数据库取数据
model=service.GetBy("小王");
//添加缓存
HttpContext.Cache.Add(cacheKey,modle,null,DateTime.MaxValue,new TimeSpan(0,0,5),CacheItemPriority.NotRemovable,
(k,v,r)=>{Trace.WriteLine($"cache with key{k} and value{v} is deleted,reason{r}")})
}//else nothing
return view();
}
OutputCache(页面缓存):
[OutputCache(
Duration(缓存多久)=10,
Location(缓存在哪里)=System.Web.UI.OutputCacheLocation.Any(默认服务器端),
VaryByParam(根据url参数(id)变化)=''id'',
)]
public ActionResult Index()
{
return view();
}