使用异步调用进行缓存

时间:2012-08-31 11:37:02

标签: c# caching architecture

你能帮帮我吗? 我开发了基于Web的系统,它向服务器发送异步请求。服务器从db获取大数据并缓存它。大约需要5秒。接下来调用缓存中的服务器搜索,因此大约需要0.05秒。 第一次5秒是可以的,但如果我一次发送超过5个异步请求,每个线程创建缓存,所以第一次超过20秒。 我怎样才能改善这个?

2 个答案:

答案 0 :(得分:0)

我之前已经有了这个,解决方法是将所有请求编组到某种队列中,或者在数据库/缓存中设置忙标志,以便后续请求知道某些事情正在解决这个问题。

因此首先请求标志为忙并执行请求。以下请求看到它正忙,并将等待标志不再标记为忙。然后,这些请求应该能够提取缓存的副本。

答案 1 :(得分:0)

有趣的场景。但是,您尚未指定如何缓存信息以及代码的运行方式。 如果您正在使用ASP.Net缓存(和WCF / Web服务),我认为它不支持像这样的更复杂的场景。 如果你想要一些解决方法的想法(正如我所说,只是想法,我之前没有尝试过),你可以尝试缓存状态为“NotCached”,“Caching”和“Cached”的标志。 请注意,如果两个请求完全同时完成,则可能会出现并发问题。 如果没有缓存,则启动该过程并将标志设置为“缓存”。在您进行缓存时,您可以决定如何处理其他即将发出的请求。使用线程休眠(我不建议)或转到数据库,但不要再次缓存。 当第一个请求完成缓存时,您将标志设置为缓存并完成工作。 如果您正在使用其他技术,则可以将请求排队,而缓存过程只能使用一个。 如果您提供更多详细信息,将有助于分析您的方案。