Java 乐观缓存并发设计模式
我有一个在服务器集群上运行的web服务。此web服务执行一些内部处理,然后可能会调用外部服务,从而产生费用 我想加入一些缓存,这样如果我收到对服务的相同请求(这是肯定会发生的),那么我就不必重复处理,既节省了处理时间/精力,也节省了服务调用外部部分的成本 但是,当我遇到以下限制时,我很难弄清楚如何管理这个缓存Java 乐观缓存并发设计模式,java,design-patterns,concurrency,Java,Design Patterns,Concurrency,我有一个在服务器集群上运行的web服务。此web服务执行一些内部处理,然后可能会调用外部服务,从而产生费用 我想加入一些缓存,这样如果我收到对服务的相同请求(这是肯定会发生的),那么我就不必重复处理,既节省了处理时间/精力,也节省了服务调用外部部分的成本 但是,当我遇到以下限制时,我很难弄清楚如何管理这个缓存 该服务在多个web服务器上运行,以实现高可用性和可扩展性 请求可能需要5秒钟才能响应,但在此期间,我可能会收到2或3个其他相同的请求 在分布式环境中工作时,如何推迟执行其他服务调用,直
- 该服务在多个web服务器上运行,以实现高可用性和可扩展性
- 请求可能需要5秒钟才能响应,但在此期间,我可能会收到2或3个其他相同的请求李>
锁定
和连接
机制可以用不同的策略实现
- 同步-您只需创建一个互斥/信号量或任何东西,并锁定对关键部分的访问。这可能会导致一些请求处于等待状态,直到锁消失
- 异步-实现某种轮询机制,如果线程遇到锁定的关键部分(如在同步处理中),将产生一条消息,表明数据未就绪。这不会导致许多打开的连接,但会引入更多的复杂性
- 是否为所有后续相同的请求返回错误
- 是否导致等待的线程重试调用web服务
- 是否返回错误,但仅返回一段时间,然后重试李>