ASP.Net 中的缓存数据引用模式





0/5 (0投票)
每次尝试从缓存访问数据时,都应假设数据可能不再存在。因此,
每次尝试从缓存访问数据时,都应假设数据可能不再存在。因此,以下模式应普遍应用于您对缓存数据的访问。在这种情况下,我们将假设缓存的对象是一个 DataTable。
public DataTable GetCustomers(bool BypassCache)
{
string cacheKey = "CustomersDataTable";
object cacheItem = Cache[cacheKey] as DataTable;
if((BypassCache) || (cacheItem == null))
{
cacheItem = GetCustomersFromDataSource();
Cache.Insert(cacheKey, cacheItem, null,
DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),
TimeSpan.Zero);
}
return (DataTable)cacheItem;
}
关于此模式,我想说明几点
- 诸如 cacheKey、cacheItem 和缓存持续时间等值,应定义一次且仅定义一次。
- 缓存可以根据需要被绕过——例如,在注册新客户并重定向到客户列表后,最好绕过缓存并用最新的数据重新填充它,其中包括新插入的客户。
- 缓存仅被访问一次。这具有性能优势,并确保不会发生 NullReferenceException,因为该项目在第一次检查时存在,但在第二次检查之前已过期。
- 该模式使用强类型检查。C# 中的 "as" 运算符将尝试将对象转换为类型,如果失败或对象为 null,则简单地返回 null。
- 持续时间存储在配置文件中。所有缓存依赖项,无论是基于文件、基于时间还是其他,都应理想地存储在配置文件中,以便可以轻松地进行更改和测量性能。我还建议指定默认缓存持续时间,并且 GetCacheSecondsFromConfig() 方法在未使用用于 cacheKey 的持续时间时使用默认值。