我们运行 .NET 2.0 网站,开始使用 ASP.Net HttpRuntime.Cache 来存储频繁数据查找的结果,以减少对数据库的访问。
片段:
lock (locker)
{
if (HttpRuntime.Cache[cacheKey] == null)
{
HttpRuntime.Cache.Insert(cacheKey, GetSomeDataToCache(), null, DateTime.Today.AddDays(1), Cache.NoSlidingExpiration);
}
return ((SomeData)HttpRuntime.Cache[cacheKey]).Copy();
}
每当我们想查看缓存时,我们都会悲观地上锁。然而,我看到了网络上发布的各种博客,建议在检查缓存值后锁定,以避免锁定的开销。但这似乎不对,因为另一个线程可能在检查后写入缓存。
所以最后我的问题是什么是“正确”的做法?我们是否使用正确的线程同步对象?我知道ReaderWriterLockSlim()但我们正在运行.NET 2.0。