65.9K
CodeProject 正在变化。 阅读更多。
Home

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

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL

1分钟阅读

viewsIcon

6541

 每次尝试从缓存访问数据时,都应假设数据可能不再存在。因此,

 

每次尝试从缓存访问数据时,都应假设数据可能不再存在。因此,以下模式应普遍应用于您对缓存数据的访问。在这种情况下,我们将假设缓存的对象是一个 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 的持续时间时使用默认值。
© . All rights reserved.