当要求在内存中缓存文件时,请采取以下措施:
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默认会处理这个问题?如果是这样,锁定缓存块是否安全?
答案 0 :(得分:1)
MemoryCache是&#34;线程安全&#34;,但它并不意味着两个进程不能一个接一个地错过缓存(第一个是生成缓存)。
现在使用Lock,这实际上取决于生成缓存的功能有多重,并将其与代码中锁的重量进行比较。
两个线程有多少次进入寻找相同的缓存值?如果答案不常见,那么如果实际上不需要大多数情况,那么可能不值得增加锁的开销。