缓存频繁访问的数据,这些数据很少更改
本文关键字:数据 访问 缓存 | 更新日期: 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)。此外,它不是线程安全的。
我认为创建一个自己的缓存解决方案是典型的"重新邀请车轮"的场景,市场上有很多缓存(甚至分布式缓存)-另外其中一些是免费的。一个好的缓存解决方案要比仅仅使用一些静态字段复杂得多。