首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中缓存REST响应

如何在java中缓存REST响应
EN

Stack Overflow用户
提问于 2017-04-08 14:07:51
回答 2查看 35.2K关注 0票数 11

我正在使用java.API构建一个应用程序。我在循环中点击api超过15000次并获得响应(响应仅是静态的)

示例

代码语言:javascript
复制
**
  username in for loop   
  GET api.someapi/username
  processing
  end loop
**

打完所有电话要花上几个小时。建议我以任何方式(任何缓存技术)来减少呼叫时间。

P.S:

1)我正在访问java客户端的api (Spring模板) 2)我所打的api是公开的,不是由我开发的 3)将部署在heroku

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-08 14:15:43

尝试使用Spring缓存抽象,docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html

您可以在具有restTemplate调用的方法中使用此抽象。

任何方法调用响应都可以使用此抽象来缓存,方法参数作为键,返回类型作为响应。

代码语言:javascript
复制
@Cacheable("username")
public UserResponse getUser(String username){
   // Code to call your rest api
}

这将围绕该方法创建一个Spring建议。每次调用该方法时,它都会检查缓存中是否有此键(用户名)可用的数据,如果是,则从缓存返回响应,而不调用实际方法。如果数据在cache中不可用,则调用实际方法并在缓存中缓存数据,因此下次用相同的键调用相同的方法时,可以从Cache中提取数据。

这种缓存抽象可以由简单的JVM缓存(如Guava )或更复杂的缓存实现(如EHCache、Redis、HazelCast )来支持。

票数 11
EN

Stack Overflow用户

发布于 2017-08-30 12:49:41

这个答案非常重要:如果您计划更新那些(缓存的)值,不要忘记在存储库中使用@CacheEvict ()和delete()。否则,在更新新记录时,将出现获取新记录的问题。

我(用EhCache)以这种方式(在存储库中)实现了我的解决方案:

CurrencyRepository.java: //定义可缓存语句

代码语言:javascript
复制
@Cacheable("currencyByIdentifier")
public Currency findOneByIdentifier(String identifier);

CacheConfiguration.java: //在EhCache配置中定义该缓存

代码语言:javascript
复制
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer() {
    return cm -> {
        cm.createCache("currencyByIdentifier", jcacheConfiguration);
        cm.createCache("sourceSystemByIdentifier", jcacheConfiguration);
    };
}

CurrencyRepository.java: //通过重写默认方法在保存和删除时退出

代码语言:javascript
复制
@Override
@CacheEvict("currencyByIdentifier")
<S extends Currency> S save(S currency);

@Override
@CacheEvict("currencyByIdentifier")
void delete(Currency currency);

我希望这有帮助:)

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43295105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档