基于数据大小,我有两种不同类别的数据缓存要求: 1)非常小的数据(2-30个字符) - 这包括诸如给定entityId的类型代码之类的东西。该系统基于父子实体层次结构的概念,并且针对与实体类型代码组合构建的值授权动作。为不同的实体缓存这些类型代码可节省db fetch的时间。 2)中/大数据 - 这是产品描述和页面等一般数据。
我很困惑哪种方法更适合第一类数据。 我可以像这样缓存它:
HttpRuntime.Cache.Insert("typeCode" + entityId, entityTypeCode);
或者像这样:
Dictionary<int, string> etCodes =
(Dictionary<int, string>)HttpRuntime.Cache["typeCode"];
etCodes[entityId] = entityTypeCode;
显然,在第二种方法中,我正在为每个entityId保存不必要的缓存项。 或者,让Cache对象填充了这么小的几个项目是可以的。
这些方法中的哪一种在性能和开销方面都很好?
答案 0 :(得分:0)
就个人而言,我会采用第二种方法处理单个对象并使用自定义对象而不是Dictionary
。
这将使我能够稍后控制更多方面,例如对象内的项目到期或更改实现。
我会这样做:
public class MyCacheObject
{
public static MyCacheObject
{
get
{
// ...Omitted locking here for simplification...
var o = HttpRuntime.Cache["MyCacheObject] as MyCacheObject;
if ( o = null )
{
o = new MyCacheObject();
HttpRuntime.Cache["MyCacheObject] = o;
}
return o;
}
}
public object GetEntity( string id, string code )
{
// ...
}
public void SetEntity( object entity, string id, string code )
{
// ...
}
// ...
}
如果您拥有实体的客户基类,则可以进一步优化GetEntity
和SetEntity
方法。