内存中缓存和并发问题

时间:2017-04-02 18:20:38

标签: asp.net-core asp.net-core-mvc

当要求在内存中缓存文件时,请采取以下措施:

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默认会处理这个问题?如果是这样,锁定缓存块是否安全?

1 个答案:

答案 0 :(得分:1)

MemoryCache是​​&#34;线程安全&#34;,但它并不意味着两个进程不能一个接一个地错过缓存(第一个是生成缓存)。

现在使用Lock,这实际上取决于生成缓存的功能有多重,并将其与代码中锁的重量进行比较。

两个线程有​​多少次进入寻找相同的缓存值?如果答案不常见,那么如果实际上不需要大多数情况,那么可能不值得增加锁的开销。