我们有一个类似于以下REST API方法:
List<item> GetItems(int AccountID)
{
var x = getFromCache(AccountID);
if(x==null)
{
x = getFromDatabase(AccountID);
addToCache(AccountID, x);
}
return x;
}
这是一种成本相对较高的方法,需要进行一些复杂的数据库调用。我们有一个常见的情况,即数百个具有相同AccountId的用户几乎同时发出调用请求(它们都被广播通知)。
在该方法中,我们将结果集缓存10秒,因为在该时间窗口内发出请求的所有人都可以获得近实时的结果。然而,由于他们都同时发出调用请求(再次针对特定的AccountId),所以缓存从未提前填充,因此每个人最终都会进行数据库调用。
那么我的问题是,在该方法内,如何暂停所有传入的请求,使它们都等待第一个结果集完成,以便其余的调用可以使用缓存的结果集?
我已经了解了一些关于Monitor.Pulse和Monitor.Lock的内容,但是针对每个accountId锁的实现似乎有些困难。任何帮助都将不胜感激。
With No Lock
命令吗? - MethodMan