我有一个函数,它使用一组输入调用外部系统。然后后端系统将为所有输入提供结果集合。
稍后我可能需要使用单个输入调用该系统。我想避免这种情况,因为我之前已经获得了对输入组的响应。
我想用其他系统的集体响应来实现缓存。
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 方法下缓存缓存。
如果这是正确的实施方式,有人可以帮助我。
答案 0 :(得分:0)
注释应该缓存方法的返回对象(result
方法的情况下为addToCache
)。这里的代码中的两个方法都修改了相同的缓存,我认为这是不必要的。
最好只有一个方法,你想最终调用它,并用注释装饰它,你可以省略另一个方法。每当您调用getResult
方法时都会发生缓存,它将负责填充缓存,或者如果没有缓存则调用外部系统。确保在getResult
方法中添加实际实现,即在此方法中调用外部系统。如果缓存已包含该对象(缓存中的搜索将基于您已定义的密钥),则将确保不会调用外部系统。
@CacheResult(cacheName = "abc")
public Result getResult(@CacheKey Input input){
//Call the actual service or external system here.
}