我有一个WCF服务说 - 服务A,它根据他的personId返回一个人的名字。 从PersonId中检索该人的姓名实际上是由另一个服务say-B提供的。ASP.Net |在哈希表或单个项目中缓存项目|需要建议
因此服务将人员ID传递给返回人员名称的服务B.
现在我想要服务A只应该调用服务B如果服务B还没有被调用personId。
所以我想实现缓存如下:
缓存的PERSONID,人名组合一旦我们从服务B. 检索还我想提出一个基于时间扶养的个别项目。如果一个personId项目自1小时以来未访问,则应该过期。
现在我有两种方法
A)创建PERSONID和PERSONNAME的哈希表。每次有一个PersonID请求首先检查personId是否存在于哈希中。如果是,则 - 然后从缓存中调用它,否则调用服务B.如果没有,则调用服务B.将人员ID人员名称组合添加到Hashtable,然后将该HashTable放入Cache中。
问题:我如何将依赖项放在单个项目上。依赖HashTable将不能解决这个问题B)缓存个人Personid和PersonName。每次有请求时,检查Cache中是否存在PersonId。如果是从缓存服务,如果不是调用服务B.
问题:这将在缓存中引入大量项目。这会产生任何问题吗?
我应该选择哪种方法?
我正在使用企业库缓存。 因此,您建议缓存每个personId,PersonName组合。 我的问题是,如果我有10到10k personIds在缓存中会有任何问题,如在内存泄漏等 – Gaurav
@Gaurav,我建议使用特定的CacheManager进行缓存人员(例如'ICacheManager personCache = CacheFactory.GetCacheManager(“PersonsCache “);')。这会将人员缓存存储与其他缓存隔离并简化管理 - 您不必担心密钥冲突,刷新此缓存不会影响其他缓存等。将许多项放入缓存不是问题 - 只会使用更多的内存。内存压力可以通过减少缓存持续时间来减少,但增加缓存未命中的机会 - 您需要根据您的使用模式找到最佳持续时间。 – VinayC
谢谢Vinay。标记为答案 – Gaurav