有关Spring缓存性能的更多信息
这是我们最后一篇关于Spring的缓存抽象的文章的后续文章 。
作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验。 了解工具的行为有助于您在做出设计选择时变得更加成熟。 在这篇文章中,我们描述了一个基准测试实验和结果,这些结果将帮助您了解Spring的内置缓存注释。
看一下以下两种方法:
@Cacheable (value = "time" , key = "#p0.concat(#p1)" ) public long annotationWithSpel(String dummy1, String dummy2) { "#p0.concat(#p1)" annotationWithSpel(String dummy1, String dummy2) { return System.currentTimeMillis(); } System.currentTimeMillis(); } @Cacheable (value = "time" ) public long annotationBased(String dummy1, String dummy2) { @Cacheable (value = annotationBased(String dummy1, String dummy2) { return System.currentTimeMillis(); } System.currentTimeMillis(); }
在这里,我们有两种非常相似的方法,每种方法都使用Spring Cache的内置@Cacheable注释进行注释。 第一个包含使用Spring Expression Language编写的表达式。 该表达式用于配置如何使用方法参数计算缓存键。 第二个依赖于Spring的默认行为,即“所有方法参数均视为键”。 实际上,以上两种方法实际上都导致完全相同的外部行为。
我们进行了一些基准测试,从而可以评估其性能:
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
事实证明,具有手动配置的缓存的方法运行速度慢4.4倍! 事后看来,由于间接费用,这种结果似乎是合理的。 Spring框架必须解析任意复杂的表达式,并且在此计算中消耗了一些周期。
我们为什么要写这个故事? 好 -
- 我们非常关心软件性能。
- 我们自己的代码库中有一些这样的实例,我们不得不权衡性能以获得零收益。
您应该检查您的代码库,并进行检查或审核。 杰蒂森(Jettison)也在其中一些实例中获得了性能提升。 您很可能在某些实例中也手动配置了缓存键。 请记住,这与Spring Cache默认为您提供的行为完全相同。 绝对的双赢局面!
翻译自: https://www.javacodegeeks.com/2019/04/more-about-spring-cache-performance.html
有关Spring缓存性能的更多信息相关推荐
- spring缓存_有关Spring缓存性能的更多信息
spring缓存 这是我们最后一篇关于Spring的缓存抽象的文章的后续文章 . 作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验. 了解工具的行为有助于您在做出设计选择时变得更加 ...
- spring_有关Spring缓存性能的更多信息
spring 这是我们上一篇有关Spring的缓存抽象的文章的后续文章. 作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验. 了解工具的行为有助于您在做出设计选择时变得更加成熟. ...
- 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
原文: 性能优化--统计信息--SQLServer自动更新和自动创建统计信息选项 原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server- ...
- 使用Redis缓存Shiro授权认证信息,搭建集群权限系统
应用如果做负载均衡,集群间session需要共享,如果session没有共享,用户登录系统以后session保存在登录的应用里面,其他应用里面没有session,没有登陆状态,访问会失败.下面介绍一个 ...
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该 ...
- Spring指南之使用Spring缓存数据(Spring Framework官方文档之缓存抽象详解)
1.请参见官方文档Spring指南之使用 Spring 缓存数据 2.请参见Spring官方文档之缓存抽象 3.参见github代码 文章目录 一.简介 二.你将创造什么(What You Will ...
- Spring.NET性能
Spring.NET性能的优化主要从以下两个方面来进行: (1)Spring.NET容器初始化速度 只 需要在spring的beans管理文件中的beans属性中加入 default-lazy-ini ...
- 8 -- 深入使用Spring -- 5...1 启用Spring缓存
8.5.1 启用Spring缓存 Spring配置文件专门为缓存提供了一个cache:命名空间,为了启用Spring缓存,需要在配置文件中导入cache:命名空间. 导入cache:命名空间之后,启用 ...
- Spring Boot 性能优化
Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...
最新文章
- ICMP重定向(ICMP Redirect)
- 公式免费转 LaTex 代码,截图、转换一气呵成,每月 1000 次全免费
- 科学计算机乱码,软件界面乱码可以这么“破”
- android 设计qq界面,[考试求助]仿照腾讯QQ应用软件,编写Android程序,登录界面设计...
- 《ASP.NET Core 微服务实战》-- 读书笔记(第7章)
- java 实现 常见排序算法(四)基数排序
- (04)VTK移动模型,判断是否相交
- 【转载】MyBatis+MySQL 返回插入的主键ID
- 扇贝有道180919每日一句
- svg动画导致持续占用CPU
- 基于LabVIEW和PCI板卡的运动控制实现
- 北京市延庆区谷歌卫星地图下载
- power BI电商案例分析
- windows防火墙ntp服务器_ad域windows ntp服务器配置详解
- .NET 6 RC2 版本发布
- 计算机笔记检讨,上课没做笔记的反省检讨书范文550字
- python 3 5的值_杨桃Python基础教程第5章:Python数据类型(3)列表s[M:n]值,的,三,smn,取值...
- テーブルTVARVとTVARVCについて
- Effie: 一款属于程序工作者的写作软件
- 主成分分析与其在人脸识别中的应用