在ASP.NET MVC 3中缓存数据

use*_*192 12 c# caching asp.net-mvc-3

我有一个ASP.NET MVC 3应用程序,基本上只是一组Web服务.这些Web服务由一组Controller操作公开.每个控制器操作都会查询我的数 因为我的数据很少变化,并且陈旧的数据不是一个问题,我想我会实现一些缓存来提高性能.我的目标是:

  1. 永远不要缓存对用户的响应.
  2. 将数据库记录缓存最多24小时.如果已经过了24小时,请再次点击数据库.

那有意义吗?我知道如何防止缓存响应.我只使用以下内容:

HttpContext.Response.Cache.SetCacheability(cacheability)
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何在内存中缓存我的数据库记录长达24小时.有没有人对如何做到这一点有任何建议?我甚至不确定在哪里看.

谢谢

Ric*_*ard 8

您可以使用System.Runtime.Caching命名空间(或ASP.NET缓存,但这是较旧的,只能在Web应用程序中使用).

这是一个示例函数,您可以使用它来包装当前的数据检索机制.您可以更改MemoryCache.Add中的参数来控制缓存的数量,但是您要求24h以上.

using System.Runtime.Caching;    // At top of file

public IEnumerable<MyDataObject> GetData() 
{
    IEnumerable<MyDataObject> data = MemoryCache.Default.Get(MYCACHEKEY) as IEnumerable<MyDataObject>;
    if (data == null)
    {
        data = // actually get your data from the database here
        MemoryCache.Default.Add(MYCACHEKEY, data, DateTimeOffset.Now.AddHours(24));
    }
    return data;
}
Run Code Online (Sandbox Code Playgroud)

正如@Bond所提到的,如果您缓存的数据可能在24小时内发生变化,您可能还希望查看使用SQL缓存依赖关系.如果它非常静态,那么这将完成你的要求.


mre*_*ros 0

是一篇很好的文章,讨论了 ASP.NET MVC 3 的几种与性能相关的实践,并提到了缓存。