缓存频繁访问的数据,这些数据很少更改

本文关键字:数据 访问 缓存 | 更新日期: 2023-09-27 18:07:19

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

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

静态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类来拥有其他缓存的哈希集,这样我就不必为只读的静态数据访问数据库。

提前感谢。

缓存频繁访问的数据,这些数据很少更改

"这看起来像一个坚实的,健壮的,线程安全的方式来管理我的缓存为我的MVC web应用程序?"

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

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