ASP.NET 输出缓存提供者实现

在ASP.NET 4之前,输出缓存机制仅能使用内存缓存,并且无法更改其行为。如果想要使用分布式缓存,例如AppFabric缓存或者自己的实现,无法做到。从ASP.NET 4开始,缓存现在遵循ASP.NET提供者模型,这意味着可以创建自己的提供者来使用缓存。如果想要使用自己的输出缓存,只需要继承OutputCacheProvider类,该类存在于System.Web.Caching命名空间中。在实现了包含Add、Get、Remove和Set方法的相关接口之后,可以在web.config文件中插入提供者以便使用它。

下面是一个简单的内存实现示例,展示了如何继承OutputCacheProvider类: public class InMemoryOutputCacheProvider : OutputCacheProvider { #region Members private Dictionary _cache = new Dictionary(); private readonly static object _syncLock = new object(); #endregion #region Methods public override object Add(string key, object entry, DateTime utcExpiry) { Set(key, entry, utcExpiry); return entry; } public override object Get(string key) { InMemoryOutputCacheItem item = null; if (_cache.TryGetValue(key, out item)) { if (item.UtcExpiry < DateTime.UtcNow) { Remove(key); return null; } return item.Value; } return null; } public override void Remove(string key) { InMemoryOutputCacheItem item = null; if (_cache.TryGetValue(key, out item)) { _cache.Remove(key); } } public override void Set(string key, object entry, DateTime utcExpiry) { var item = new InMemoryOutputCacheItem(entry, utcExpiry); lock (_syncLock) { if (_cache.ContainsKey(key)) { _cache[key] = item; } else { _cache.Add(key, item); } } } #endregion } public class InMemoryOutputCacheItem { #region Members public DateTime UtcExpiry { get; set; } public object Value { get; set; } #endregion #region Ctor public InMemoryOutputCacheItem(object value, DateTime utcExpiry) { Value = value; UtcExpiry = utcExpiry; } #endregion } 在代码中,实现了一个基于项类的内存字典缓存。实现非常简单,并且基于一个看起来像这样的项类:

为了使用之前输出缓存的实现,需要将其插入到应用程序的web.config文件中。在system.web元素下,需要添加caching元素。在caching元素内部,添加一个outputCache元素并添加创建的提供者。以下示例展示了如何做到这一点: <?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true" targetFramework="4.0"> </compilation> <caching> <outputCache defaultProvider="InMemory"> <providers> <add name="InMemory" type="InMemoryOutputCacheProvider" /> </providers> </outputCache> </caching> <authentication mode="Windows" /> <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> </system.web> </configuration>

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485