Caching 使用实体框架在ASP.NET核心MVC的IMemoryCache中缓存实体本身

Caching 使用实体框架在ASP.NET核心MVC的IMemoryCache中缓存实体本身,caching,entity-framework-core,asp.net-core-mvc,Caching,Entity Framework Core,Asp.net Core Mvc,在ASP.NET核心MVC应用程序中,我正在ConfigureServices()中使用IMemoryCache: 在控制器中,我最初有以下代码: // List<> of POCOs: var myLines = await _context.MyEntity.Where(somecondition).ToListAsync(); //POCO列表: var myLines=await_context.MyEntity.Where(somecondition.toListSync

在ASP.NET核心MVC应用程序中,我正在
ConfigureServices()中使用
IMemoryCache

在控制器中,我最初有以下代码:

// List<> of POCOs:
var myLines = await _context.MyEntity.Where(somecondition).ToListAsync();
//POCO列表:
var myLines=await_context.MyEntity.Where(somecondition.toListSync();
我把它改成:

// List<> of POCOs:
var myLines = await
    _cache.GetOrCreateAsync("mykey",async entry => {
        return
            await _context.MyEntity.Where(somecondition).ToListAsync();
    });
//POCO列表:
var myLines=等待
_cache.GetOrCreateAsync(“mykey”,异步条目=>{
返回
wait_context.MyEntity.Where(somecondition.toListSync();
});
这很有效

但我想知道这到底是不是一个坏习惯


缓存连接的POCO是否有问题
  • 你的POCO被其他人更改了,你的缓存怎么知道?您需要一些同步任务来同步缓存和数据库数据
  • 您的应用程序将被delpoyed到一个web场,memery缓存只对一台机器起作用,路由到另一台机器的请求不会有缓存。在这个senario中,您需要一个进程外缓存,比如redis,或者甚至构建您自己的分布式缓存

  • 因此,这实际上取决于您的需求是什么,如果它足够简单,那么这种方法就是一种好的实践。否则,您需要考虑上述2个senario,因为这2个是缓存解决方案最常见的问题。

    这是一个简化的示例代码;更改基础数据由其他一些代码行跟踪。是的,我知道这适用于一台服务器,这在我的情况下不是问题。我最担心的是POCO的附加“状态”。无论如何,谢谢你。
    // List<> of POCOs:
    var myLines = await
        _cache.GetOrCreateAsync("mykey",async entry => {
            return
                await _context.MyEntity.Where(somecondition).ToListAsync();
        });