我花了很多时间来研究这个问题,并且有很多方法可以在Java中使用(我特别关注Java 8解决方案,应该注意).
好的,所以这是我的(通用)情况 – 请注意这是一个例子,所以不要花时间在它的工作方式/它在做什么:
>有人通过API调用请求某些内容
> API从数据存储中检索一些数据
>但是,我想在某些缓存系统中缓存此聚合响应
>我需要调用缓存API(通过REST)来缓存此响应
>在将响应返回到原始API调用之前,我不想等到此调用完成
一些模糊的代码结构:
@GET
@ // api definitions
public Response myAPIMethod(){
// get data from datastore
Object o = getData();
// submit request to cache data, without blocking
saveDataToCache();
// return the response to the Client
return Response.ok(data).build();
}
什么是在后台运行saveDataToCache而不必在返回数据之前等待的“最佳”(最佳,最安全,标准)方式?请注意,此缓存不应经常发生(可能每秒几次).
我尝试了几种方法,特别是使用CompletableFutures但是当我输入一些日志时,它似乎总是在返回响应之前等待(我没有调用get).
基本上,客户端的连接可能会在缓存调用完成之前关闭 – 但我希望它已经完成了:)我不确定规则是否与客户端连接的生命周期内的规则相同.
提前感谢任何建议,如果有任何不清楚的地方,请告诉我……我试图以一种可以理解的方式来定义它,而不知道我正在尝试做什么的领域知识(我无法透露).