如何缓存响应列表中的每个元素以获取输入列表

时间:2017-07-24 11:22:55

标签: java caching ehcache

我有一个函数,它使用一组输入调用外部系统。然后后端系统将为所有输入提供结果集合。

稍后我可能需要使用单个输入调用该系统。我想避免这种情况,因为我之前已经获得了对输入组的响应。

我想用其他系统的集体响应来实现缓存。

public List<Result> process(List<Input> inputs){
// call other system collectively and cache each independent response
// later when I call each input it shall not cal external system because we have cache.

 foreach(Result result: results){
 addtoCache(input, result);

 }

}

@CacheResult(cacheName = "abc")
public Result addToCache(@CacheKey Input input, Result result){
return result;
}

@CacheResult(cacheName = "abc")
public Result getResult(@CacheKey Input input){
//process and send result. It shall not call the external system if the data was obtained previously in process method.
}

稍后时间

我将调用 getResult 方法,如果可用,它是否会在 addToCache 方法下缓存缓存。

如果这是正确的实施方式,有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

注释应该缓存方法的返回对象(result方法的情况下为addToCache)。这里的代码中的两个方法都修改了相同的缓存,我认为这是不必要的。

最好只有一个方法,你想最终调用它,并用注释装饰它,你可以省略另一个方法。每当您调用getResult方法时都会发生缓存,它将负责填充缓存,或者如果没有缓存则调用外部系统。确保在getResult方法中添加实际实现,即在此方法中调用外部系统。如果缓存已包含该对象(缓存中的搜索将基于您已定义的密钥),则将确保不会调用外部系统。

@CacheResult(cacheName = "abc")
public Result getResult(@CacheKey Input input){
//Call the actual service or external system here. 
}