ASP.Net |缓存哈希表或单个项目中的项目需要建议

时间:2011-09-21 09:15:44

标签: asp.net wcf caching

我有一个WCF服务说 - 服务A,它根据他的personId返回一个人的名字。 从PersonId检索此人的姓名实际上是由另一个服务人员说的-B。

所以服务A将人员ID传递给服务B,返回人名。

现在我希望只有在没有为personId调用服务B时,​​服务A才应该调用服务B.

所以我想按如下方式实现缓存:

一旦我们从服务B检索到人员,人名组合,请对其进行缓存。 另外,我想在单个项目上设置基于时间的依赖性。如果个人personId项目自1小时后仍未访问,则该项目将过期。

现在我有两种方法

A)创建personid和personName的hashTable。每次有PersonID请求时,首先检查Hash中是否存在personId。如果是,则从Cache调用服务B.然后调用服务B.如果是 - 不调用服务B.添加人员ID人名组合到Hashtable然后将此HashTable放入缓存中。

问题:如何依赖单个​​项目。对HashTable的依赖不会解决这个问题

B)缓存个人Personid和PersonName。每次有请求时检查Cache中是否存在PersonId。如果是,则从缓存服务,如果不是呼叫服务B。

问题:这会在Cache中引入很多项目。这会产生任何问题吗?

我应该选择哪种方法以及如何使用?

1 个答案:

答案 0 :(得分:0)

您打算使用哪种缓存框架?从.NET 4看一下System.Runtime.Caching - 它应该可以解决你的困境。例如,您可以使用不同的缓存包来缓存人员:

private static ObjectCache personCache = new MemoryCache();

private Person Get(string id)
{
   var p = personCache[id] as Person;
   if (null == p)
   {
        // Make the service call to get the person
        ...
        // add to cache
        personCache.Add(id, p, DateTime.Now.AddMinutes(30));
   }
   return p;
}

对于以前的.NET版本,您可以使用Caching Application Block