我有一个与音乐相关的 ASP.NET 网站,它在第一次请求时缓存数据库中的大量静态信息。
有时,当应用程序负载较重时,应用程序会被重置并清除缓存,然后所有 http 请求都会转到数据库以检索静态数据并将其缓存以供其他请求使用。
如何确保只有一个请求访问数据库并缓存结果,以便其他请求只需从缓存中读取该信息,而不必一遍又一遍地检索相同的信息。
我可以使用线程锁定吗?例如,我可以执行类似 lock(this) { db access here } 的操作吗?
最佳答案
是的,在缓存代码中,您需要将数据库访问代码放入 lock
block 中。但是,不要锁定此
。通常你会做类似的事情
private static readonly object staticObjectToLockOn = new object();
...
if (cache[cacheKey] == null)
{
lock(staticObjectToLockOn)
{
// double-check the cache is still null inside the lock
if (cache[cacheKey] == null)
{
// get data from the database, add to cache
}
}
}
关于asp.net - 对数据库的访问进行队列以避免多个缓存项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989520/