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