ASP.NET缓存方法有哪些?最佳实践示例解析
ASP.NET缓存方法分析和实践示例
ASP.NET缓存是提升应用性能、减轻数据库压力、改善用户体验的核心机制,深入理解并正确运用各类缓存策略,是构建高性能、可伸缩Web应用的关键。
输出缓存:全页加速利器
输出缓存将整个页面或用户控件的渲染结果存储在内存中,后续相同请求直接返回缓存内容,跳过页面生命周期和代码执行。
-
页面级缓存:
<%@OutputCacheDuration="60"VaryByParam="id"Location="Server"%> Duration:缓存有效期(秒)。VaryByParam:根据查询字符串参数(如id)创建不同缓存版本。表示所有参数,"none"表示不区分。Location:缓存位置(Any,Client,Downstream,Server,None,ServerAndClient)。Server是最常用且安全的。VaryByCustom:支持高度自定义缓存变体(如按用户角色、浏览器类型)。
-
用户控件级缓存:
对页面内相对独立、更新频率较低的部分(如导航菜单、热门文章列表)使用片段缓存,避免整页缓存失效:<%@OutputCacheDuration="300"Shared="true"VaryByParam="none"%> Shared="true":允许多个页面共享同一控件的缓存实例,节省内存。
内存缓存:灵活的数据缓存
System.Runtime.Caching.MemoryCache(或旧版System.Web.Caching.Cache)提供键值对存储,用于缓存数据库查询结果、复杂计算输出、配置数据等任意对象。
-
基础操作:
//获取缓存实例ObjectCachecache=MemoryCache.Default;//添加缓存项(带绝对过期)cache.Add("TopProducts",GetTopProducts(),DateTimeOffset.Now.AddMinutes(30));//获取缓存项varproducts=cache.Get("TopProducts")asList<Product>;if(products==null){products=GetTopProductsFromDB();//缓存失效,重新加载cache.Set("TopProducts",products,DateTimeOffset.Now.AddMinutes(30));//重新设置}//使用Set方法(更灵活,可覆盖)varpolicy=newCacheItemPolicy{AbsoluteExpiration=DateTimeOffset.Now.AddHours(2),Priority=CacheItemPriority.Default//内存不足时清理优先级};cache.Set("AppConfig",LoadConfiguration(),policy); -
过期策略:
AbsoluteExpiration:绝对过期时间点。SlidingExpiration:滑动过期时间(如TimeSpan.FromMinutes(10)),每次访问后重置过期时间,适用于访问频繁的数据。- 组合使用:可同时设置,以先到期的为准。
-
缓存依赖: