我有一个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中引入很多项目。这会产生任何问题吗?
我应该选择哪种方法以及如何使用?
答案 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。