我对缓存数据的概念不熟悉,我想问一下是否有任何问题我忽略了我正在构建的策略,用于从我的数据库缓存我的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,所以我不必为了这个只读数据库,基本上是静态数据。
提前谢谢。
答案 0 :(得分:0)
“这看起来像是一种可靠,健壮,线程安全的方式来管理我的MVC Web应用程序的缓存吗?”
不,它没有。例如,如何保持低数据的大小?您应该从缓存中清除未使用的数据(请查看:http://msdn.microsoft.com/en-us/library/dd632018.aspx)。另外,它不是线程安全的。
我认为创建自己的缓存解决方案是典型的“重新邀请轮”场景,市场上有很多缓存(甚至是分布式缓存) - 此外还有一些是免费的。一个好的缓存解决方案比开始使用一些静态字段要复杂得多。