2012-08-31 106 views
0

您能帮我吗? 我开发了基于web的系统,它向服务器发送异步请求。服务器从数据库获取大数据并缓存它。它需要约5秒。接下来在高速缓存中调用服务器搜索,因此需要〜0.05秒。 第一次5秒是好的,但如果我一次发送5个以上的异步请求,每个线程创建缓存,因此首次需要超过20秒。 我该如何改进?使用异步调用进行缓存

回答

0

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

所以首先请求标志为繁忙并执行请求。以下请求看到它很忙,并会等到标志不再被标记为繁忙。那些请求应该能够提取缓存的副本。

0

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