1
當需要在內存中緩存文件,假定了以下行動:內存緩存和併發的問題
public IActionResult Article(int id) {
String content = MemoryCache.Get<String>(id.ToString());
if(content == null) {
MemoryCache.Set<String>(id.ToString(), ReadFile(id), new MemoryCacheEntryOptions() {
AbsoluteExpiration = DateTime.Now.AddHours(1)
});
content = MemoryCache.Get<String>(id.ToString());
}
return View(content);
}
如果兩個或更多的請求命中服務器在同一時間會發生什麼?這會導致文件被多次讀取和緩存,或者ASP.Net Core MVC默認處理這個問題?如果是這樣,鎖定緩存塊是否安全?
我已經想通了,答案是「是的確會導致問題」,因爲Get或Set方法不是線程安全的。另一方面,'GetOrAdd'或'AddOrUpdate'方法是線程安全的,我可以使用。 – Arrrr