MVC缓存经常访问的数据,这些数据很少会发生变化

时间:2013-04-03 14:58:27

标签: c# model-view-controller caching

我对缓存数据的概念不熟悉,我想问一下是否有任何问题我忽略了我正在构建的策略,用于从我的数据库缓存我的MVC Web应用程序中的数据。我想强调的是,基本上我正在查看缓存的数据实际上是只读的,并且只会非常频繁地更新(与应用程序刷新的代码升级相吻合)。

根据我的研究,我计划使用静态类作为构建和维护缓存的助手。下面的代码显示了如何从数据库表构建缓存,该表包含不同的棒球卡条件等级(Mint,Near Mint等)

Static CacheHelper类:

public static class CacheHelpers
{
    private static HashSet<baseballcardcondition> _CardConditionsCache = null;
    public static HashSet<baseballcardcondition> CardConditionsCache
    {
        get
        {
            if (_CardConditionsCache == null)
            {
                _CardConditionsCache = (HttpContext.Current.Cache["CardConditionsCache"] as HashSet<baseballcardconditions>);
                if (_CardConditionsCache == null)
                {
                    mydbEntities db = new mydbEntities();
                    _CardConditionsCache = new HashSet<baseballcardconditions>(db.baseballcardconditions);
                    HttpContext.Current.Cache.Insert("CardConditionsCache", _CardConditionsCache);
                }
            }
            return _CardConditionsCache;
        }
        set
        {
            HttpContext.Current.Cache.Insert("CardConditionsCache", _CardConditionsCache);
        }
    }//public static HashSet<baseballcardconditions> CardConditionsCache
}//public static class CacheHelpers

稍后我将使用此数据为jqGrid网格(用于显示表格数据的jQuery javascript插件)构建格式化字符串,并通过以下方式访问它:

        //cardConditionSelectListHelperString
        string tempString = "";

        foreach (var keyPair in CacheHelpers.CardConditionsCache)
        {
            tempString += keyPair.IdBaseballCardCondition + ":" + keyPair.Condition + ";";
        }

这看起来像是一种可靠,健壮且线程安全的方式来管理我的MVC Web应用程序的缓存吗?我可能会扩展我的CacheHelpers类以拥有其他缓存的Hashsets,所以我不必为了这个只读数据库,基本上是静态数据。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

“这看起来像是一种可靠,健壮,线程安全的方式来管理我的MVC Web应用程序的缓存吗?”

不,它没有。例如,如何保持低数据的大小?您应该从缓存中清除未使用的数据(请查看:http://msdn.microsoft.com/en-us/library/dd632018.aspx)。另外,它不是线程安全的。

我认为创建自己的缓存解决方案是典型的“重新邀请轮”场景,市场上有很多缓存(甚至是分布式缓存) - 此外还有一些是免费的。一个好的缓存解决方案比开始使用一些静态字段要复杂得多。