Java 什么设计模式或缓存策略适合此模式?

Java 什么设计模式或缓存策略适合此模式?,java,caching,messaging,producer-consumer,Java,Caching,Messaging,Producer Consumer,我需要在我的应用程序主页上使用许多第三方系统的服务。与这些下游系统相关的数据以不同的时间间隔更新,理想情况下,我的系统将显示最新的数据。每次用户点击我的主页时,我的系统都会向这些下游系统生成请求,这不是一个可扩展的解决方案。我可以使用什么策略来确保i表面的数据是最新的,而不影响这些下游系统的可靠性 消费者/生产者策略是否最适合此要求 我不认为你真的需要一个策略,你只需要一个缓存 选择投票的最长时间间隔。获取数据的代码只会记住结果和获取数据的时间。在时间间隔到期之前,它将返回缓存的数据,而不是再次

我需要在我的应用程序主页上使用许多第三方系统的服务。与这些下游系统相关的数据以不同的时间间隔更新,理想情况下,我的系统将显示最新的数据。每次用户点击我的主页时,我的系统都会向这些下游系统生成请求,这不是一个可扩展的解决方案。我可以使用什么策略来确保i表面的数据是最新的,而不影响这些下游系统的可靠性


消费者/生产者策略是否最适合此要求

我不认为你真的需要一个策略,你只需要一个缓存

选择投票的最长时间间隔。获取数据的代码只会记住结果和获取数据的时间。在时间间隔到期之前,它将返回缓存的数据,而不是再次查询。一旦到达时间,下一个请求将获取新数据


缓存时间是一个判断调用,它基于数据过时的速度,而不是您希望对下游系统有多好。(请注意,在许多系统中,如果您向它们大量发送请求,它们无论如何都会将您拒之门外)。

您可能需要检查memcache,我们在一个涉及大量web服务调用的项目中使用了它,它的效果非常好。

正如其他答案所指出的,在您的情况下,缓存听起来是一个不错的策略

然而,另一种选择是使用基于pubsub的设计(而不是生产者-消费者)。例如,您可以让3个线程以各自的速率对服务进行采样,并发布新数据。主系统订阅这些更新(可以在另一个线程中读取),并更新其内部状态


生产者-消费者类似,但不适合您的情况,因为客户端(您的主系统)不需要使用数据。假设您有几个系统使用来自服务的相同数据——每个系统都需要订阅这些更新,但不使用它们,因为更新需要到达所有客户端。Producer consumer适用于任务池之类的事情,在任务池中,每个工作者都需要使用消息,因为每个任务只应由一个工作者运行

你能改变/修改那些第三方系统吗?我可能会使用缓存HTTP代理,比如squid;每个下游系统都必须提供“可缓存”内容,才能有效工作。