我正在使用java.API构建一个应用程序。我在循环中点击api超过15000次并获得响应(响应仅是静态的)
示例
**
username in for loop
GET api.someapi/username
processing
end loop
**打完所有电话要花上几个小时。建议我以任何方式(任何缓存技术)来减少呼叫时间。
P.S:
1)我正在访问java客户端的api (Spring模板) 2)我所打的api是公开的,不是由我开发的 3)将部署在heroku
发布于 2017-04-08 14:15:43
尝试使用Spring缓存抽象,docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html。
您可以在具有restTemplate调用的方法中使用此抽象。
任何方法调用响应都可以使用此抽象来缓存,方法参数作为键,返回类型作为响应。
@Cacheable("username")
public UserResponse getUser(String username){
// Code to call your rest api
}这将围绕该方法创建一个Spring建议。每次调用该方法时,它都会检查缓存中是否有此键(用户名)可用的数据,如果是,则从缓存返回响应,而不调用实际方法。如果数据在cache中不可用,则调用实际方法并在缓存中缓存数据,因此下次用相同的键调用相同的方法时,可以从Cache中提取数据。
这种缓存抽象可以由简单的JVM缓存(如Guava )或更复杂的缓存实现(如EHCache、Redis、HazelCast )来支持。
发布于 2017-08-30 12:49:41
这个答案非常重要:如果您计划更新那些(缓存的)值,不要忘记在存储库中使用@CacheEvict ()和delete()。否则,在更新新记录时,将出现获取新记录的问题。
我(用EhCache)以这种方式(在存储库中)实现了我的解决方案:
CurrencyRepository.java: //定义可缓存语句
@Cacheable("currencyByIdentifier")
public Currency findOneByIdentifier(String identifier);CacheConfiguration.java: //在EhCache配置中定义该缓存
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer() {
return cm -> {
cm.createCache("currencyByIdentifier", jcacheConfiguration);
cm.createCache("sourceSystemByIdentifier", jcacheConfiguration);
};
}CurrencyRepository.java: //通过重写默认方法在保存和删除时退出
@Override
@CacheEvict("currencyByIdentifier")
<S extends Currency> S save(S currency);
@Override
@CacheEvict("currencyByIdentifier")
void delete(Currency currency);我希望这有帮助:)
https://stackoverflow.com/questions/43295105
复制相似问题