你能帮帮我吗?我开发了基于web的系统,向服务器发送异步请求。服务器从数据库中获取大数据并缓存它。这需要大约5秒。Next call Server在缓存中搜索,因此需要大约0.05秒。对于第一次,5秒是可以的,但如果我在一次发送超过5个异步请求,每个线程创建缓存,所以它需要第一次超过20秒。我该如何改进这一点呢?
发布于 2012-08-31 19:43:37
我以前遇到过这种情况,解决方案是将所有请求编组到某种类型的队列中,或者在数据库/缓存中设置忙标志,以便后续请求知道正在处理此问题。
所以第一个请求标记为忙并执行请求。下面的请求看到它是忙的,并将等待,直到标志不再标记为忙。然后,这些请求应该能够拉取缓存的副本。
发布于 2012-08-31 19:47:22
有趣的场景。但是,您还没有指定如何缓存信息以及代码如何运行。如果您正在使用ASP.Net缓存(和WCF / Web service),我不认为它支持像这样的更复杂的场景。如果你需要一些解决办法的想法(正如我所说的,只是想法,我以前没有尝试过),你可以尝试缓存一个状态为"NotCached“、"Caching”和"Cached“的标志。只需注意,如果两个请求完全同时完成,您可能会遇到并发问题。如果没有缓存,则启动该进程并将标志设置为"Caching“。在缓存时,您可以决定如何处理其他即将到来的请求。使用线程睡眠(我不推荐)或转到数据库,但不再缓存。当第一个请求完成缓存时,将标志设置为Cached并完成作业。如果您正在使用其他技术,则可以对请求进行排队,同时只缓存一个请求。如果您提供更多细节,它将有助于分析您的场景。
https://stackoverflow.com/questions/12214554
复制相似问题