tha*_*gce 6 rest spring caching rest-client spring-cache
我正在java中构建一个应用程序.我在循环中点击api超过15000次并获得响应(响应仅为静态)
例
**
username in for loop
GET api.someapi/username
processing
end loop
**
Run Code Online (Sandbox Code Playgroud)
完成所有通话需要几个小时.建议我以任何方式(任何缓存技术)来减少通话时间.
PS:
1)我从java rest客户端(Spring resttemplate)命中api
2)我打的是公开的,不是我开发的
3)将部署在heroku中
小智 6
尝试使用Springs Cache Abstraction , https://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
}
Run Code Online (Sandbox Code Playgroud)
这会围绕该方法创建Spring AOP建议.每次调用该方法时,它都会检查该密钥(用户名)的缓存中是否有数据,如果是,则返回缓存中的响应,而不调用实际方法.如果数据在高速缓存中不可用,则它调用实际方法并将数据缓存在高速缓存中,因此下次使用相同的密钥调用相同的方法时,可以从高速缓存中选择数据.
这种缓存抽象可以由简单的JVM缓存(如Guava)或更复杂的缓存实现(如EHCache,Redis,HazelCast)支持.
该答案的一个非常重要的注意事项:如果您打算更新那些(缓存的)值,请不要忘记对存储库中的save()和delete()使用@CacheEvict。否则,您将在更新新记录时遇到问题。
我已经在存储库中以这种方式(通过EhCache)实现了我的解决方案:
CurrencyRepository.java:// 定义可缓存的语句
@Cacheable("currencyByIdentifier")
public Currency findOneByIdentifier(String identifier);
Run Code Online (Sandbox Code Playgroud)
CacheConfiguration.java://在EhCache配置中定义该缓存
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer() {
return cm -> {
cm.createCache("currencyByIdentifier", jcacheConfiguration);
cm.createCache("sourceSystemByIdentifier", jcacheConfiguration);
};
}
Run Code Online (Sandbox Code Playgroud)
CurrencyRepository.java:// 通过覆盖默认方法退出保存和删除
@Override
@CacheEvict("currencyByIdentifier")
<S extends Currency> S save(S currency);
@Override
@CacheEvict("currencyByIdentifier")
void delete(Currency currency);
Run Code Online (Sandbox Code Playgroud)
希望对您有所帮助:)
| 归档时间: |
|
| 查看次数: |
16434 次 |
| 最近记录: |