spring中cache注解中加上表达式会变慢!

在老外的两篇博文中,https://plumbr.io/blog/performance-blog/more-about-spring-cache-performance
https://plumbr.io/blog/performance-blog/spring-cache-profiling

分别讲解了,在@cache注解中,使用参数速度变慢(通过JMH)基准测试工具测试。

不使用参数:

@Cacheable("time")
public long annotationBased(String dummy) {
  return System.currentTimeMillis();
}

public long manual(String dummy) {
  Cache.ValueWrapper valueWrapper = cache.get(dummy);
  long result;
  if (valueWrapper == null) {
    result = System.currentTimeMillis();
    cache.put(dummy, result);
  } else {
    result = (long) valueWrapper.get();
  }
  return result;
}
JMH结果:
    
Benchmark                       Mode  Cnt    Score    Error  Units
CacheBenchmark.annotationBased  avgt    5  245.960 ± 27.749  ns/op
CacheBenchmark.manual           avgt    5   16.696 ±  0.496  ns/op
CacheBenchmark.nocache          avgt    5   44.586 ±  9.091  ns/op
可以看到,avgt是平均执行每次操作的耗费时间长短,手工的快;

再看注解中有参数的:

@Cacheable(value = "time", key = "#p0.concat(#p1)")
public long annotationWithSpel(String dummy1, String dummy2) {
  return System.currentTimeMillis();
}
@Cacheable(value = "time")
public long annotationBased(String dummy1, String dummy2) {
  return System.currentTimeMillis();
}
JMH测试结果:
Benchmark                       Mode  Cnt     Score    Error  Units
CacheBenchmark.annotationBased  avgt    5   271.975 ± 11.586  ns/op
CacheBenchmark.spel             avgt    5  1196.744 ± 93.765  ns/op
CacheBenchmark.manual           avgt    5    16.325 ±  0.856  ns/op
CacheBenchmark.nocache          avgt    5    40.142 ±  4.012  ns/op
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值