我正确使用缓存吗?

时间:2012-07-02 02:14:03

标签: c# asp.net asp.net-mvc performance

我有一个应用程序,其中每个页面都使用存储在数据库中的一组数据。为了避免每次需要数据时都调用数据库,我决定将其放在HttpRuntime.Cache中。我正在调用DB并在构造函数中为我的Controller.cs文件缓存数据,这是这个数据的唯一使用位置。

上面的方法有效,但我想知道这是否是加载缓存的正确位置/方式?

此外,每个用户的数据都是相同的,并且每年可能会改变几次。

1 个答案:

答案 0 :(得分:2)

缓存数据和使用缓存数据是两个不同的问题。假设您有此接口来获取数据:

public interface IDataRepository 
{
    List<Data> GetData();
}

你可以有两个实现,一个从数据库中获取数据,另一个只是充当代理并在必要时缓存数据:

public class DataRepository : IDataRepository
{
    public virtual List<Data> GetData()
    {
        //Hit the database and get the data
    }
}

public class CachedDataRepository : DataRepository, IDataRepository
{
    public override List<Data> GetData()
    {
        if(!IsCachedAlready())
        {
            var data = base.GetData();
            AddToCache(data);
        }

        return DataFromCache();
    }
}

您现在可以使用相同的界面,如果您在控制器中使用的数据是否被缓存,则无需担心。