热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

在老外的两篇博文中,https:plumbr.ioblogperformance-blogmore-about-spring-cache-performance&#x

在老外的两篇博文中,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


推荐阅读
author-avatar
ZZDXP
学 無
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有