0

请你帮助我好吗?我开发了基于 Web 的系统,它将异步请求发送到服务器。服务器从数据库中获取大数据并缓存它。大约需要 5 秒。下一次调用缓存中的服务器搜索,因此需要约 0.05 秒。第一次 5 秒是可以的,但是如果我一次发送超过 5 个异步请求,每个线程都会创建缓存,所以第一次需要超过 20 秒。我该如何改进呢?

4

2 回答 2

0

我以前有过这种情况,解决方案是将所有请求编组到某种队列中,或者在数据库/缓存中设置一个繁忙的标志,以便后续请求知道某些东西正在解决这个问题。

所以第一个请求标记为忙并执行请求。以下请求会看到它很忙,并将等到该标志不再标记为忙。然后这些请求应该能够提取缓存的副本。

于 2012-08-31T11:43:36.780 回答
0

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

于 2012-08-31T11:47:22.043 回答