我的网站上有很多代码看起来像这样;
Item item;
if(Cache["foo"] != null)
{
item = (Item)Cache["foo"];
}
else
{
item = database.getItemFromDatabase();
Cache.insert(item, "foo", null, DateTime.Now.AddDays(1), ...
}
其中一个这样的实例有一个相当昂贵的getItemFromDatabase
方法(这是它被缓存的主要原因)。我遇到的问题是,每次释放或重新启动应用程序时,缓存都会被清除,然后一大群用户上线并点击上面的代码,这会导致数据库服务器死亡。
处理这些场景的典型方法是什么?
答案 0 :(得分:2)
您可以在global.asax文件中挂钩Application OnStart事件,并在应用程序启动时调用一个方法在单独的线程中加载昂贵的数据库调用。
使用锁定模式来使用专用类来访问这些属性也可能是一个想法,以避免在初始值为null时多次调用数据库。