【问题标题】:How to cache REST API response in java如何在 Java 中缓存 REST API 响应
【发布时间】:2017-09-03 20:10:43
【问题描述】:

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

例子

**
  username in for loop   
  GET api.someapi/username
  processing
  end loop
**

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

附注:

1) 我从 java rest 客户端 (Spring resttemplate) 访问 api

2)我打的那个api是公共的,不是我开发的

3) 将部署在 heroku 中

【问题讨论】:

  • 缓存系统需要内存资源。特别是api调用频繁的时候。其实你的情况还不够清楚。为什么响应一样,调用api 15000次?为什么你决定这样.我认为解决方案不正确,请描述您的情况,我们会尽力提供解决方案。

标签: spring rest caching rest-client spring-cache


【解决方案1】:

对该答案的一个非常重要的说明:如果您打算更新那些(缓存的)值,请不要忘记在存储库中的 save() 和 delete() 上使用 @CacheEvict。否则,更新时您将无法获取新记录。

我已经以这种方式(在存储库中)实现了我的解决方案(使用 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);

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    尝试使用 Springs 缓存抽象,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 AOP 建议。每次调用该方法时,它都会检查该键(用户名)在缓存中是否有可用的数据,如果是,则从缓存返回响应而不调用实际方法。如果缓存中没有数据,则调用实际方法并将数据缓存在缓存中,因此下次使用相同键调用相同方法时,可以从缓存中提取数据。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-08
      • 2018-10-10
      • 1970-01-01
      • 2018-09-12
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多