我们正在使用 Enterprise Library 5 和它在我们的 Web 应用程序中提供的 CacheManager。在我们开始对应用程序进行重负载测试之前,一切似乎都运行良好。
我们使用基于 ID 的密钥缓存数据库中的记录。我们并不是一直从缓存中请求一个项目,有时我们需要从缓存中获取项目列表。为此,我们有一个 LINQ 查询,它生成一个 Select(e => CacheManager.GetData(id_from_list)) 并从缓存中返回项目列表。大多数情况下,这工作正常,但在重负载时,GetData 方法成为瓶颈,因为缓存管理器对缓存的读取和写入操作都执行锁定。基本上一次只有一个线程可以从缓存中读取数据。
其他人是否遇到过同样的问题,您是否找到了解决此问题的方法?
注意:我们尝试实际缓存项目列表并根据列表中项目的 id 组合键。这实际上解决了问题,并且 cachemanager.getdata 不再是瓶颈......但是......显然这不是一个好的解决方案,因为我们可以在很多列表中的缓存中拥有数千次的每个项目。