这是我们最后一篇关于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框架必须解析任意复杂的表达式,并且在此计算中消耗了一些周期。

我们为什么要写这个故事? 好 -

  1. 我们非常关心软件性能。
  2. 我们自己的代码库中有一些这样的实例,我们不得不权衡性能以获得零收益。

您应该检查您的代码库,并进行检查或审核。 杰蒂森(Jettison)也在其中一些实例中获得了性能提升。 您很可能在某些实例中也手动配置了缓存键。 请记住,这与Spring Cache默认为您提供的行为完全相同。 绝对的双赢局面!

翻译自: https://www.javacodegeeks.com/2019/04/more-about-spring-cache-performance.html

有关Spring缓存性能的更多信息相关推荐

  1. spring缓存_有关Spring缓存性能的更多信息

    spring缓存 这是我们最后一篇关于Spring的缓存抽象的文章的后续文章 . 作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验. 了解工具的行为有助于您在做出设计选择时变得更加 ...

  2. spring_有关Spring缓存性能的更多信息

    spring 这是我们上一篇有关Spring的缓存抽象的文章的后续文章. 作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验. 了解工具的行为有助于您在做出设计选择时变得更加成熟. ...

  3. 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项

    原文: 性能优化--统计信息--SQLServer自动更新和自动创建统计信息选项 原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server- ...

  4. 使用Redis缓存Shiro授权认证信息,搭建集群权限系统

    应用如果做负载均衡,集群间session需要共享,如果session没有共享,用户登录系统以后session保存在登录的应用里面,其他应用里面没有session,没有登陆状态,访问会失败.下面介绍一个 ...

  5. Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用

    从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该 ...

  6. Spring指南之使用Spring缓存数据(Spring Framework官方文档之缓存抽象详解)

    1.请参见官方文档Spring指南之使用 Spring 缓存数据 2.请参见Spring官方文档之缓存抽象 3.参见github代码 文章目录 一.简介 二.你将创造什么(What You Will ...

  7. Spring.NET性能

    Spring.NET性能的优化主要从以下两个方面来进行: (1)Spring.NET容器初始化速度 只 需要在spring的beans管理文件中的beans属性中加入 default-lazy-ini ...

  8. 8 -- 深入使用Spring -- 5...1 启用Spring缓存

    8.5.1 启用Spring缓存 Spring配置文件专门为缓存提供了一个cache:命名空间,为了启用Spring缓存,需要在配置文件中导入cache:命名空间. 导入cache:命名空间之后,启用 ...

  9. Spring Boot 性能优化

    Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...

最新文章

  1. ICMP重定向(ICMP Redirect)
  2. 公式免费转 LaTex 代码,截图、转换一气呵成,每月 1000 次全免费
  3. 科学计算机乱码,软件界面乱码可以这么“破”
  4. android 设计qq界面,[考试求助]仿照腾讯QQ应用软件,编写Android程序,登录界面设计...
  5. 《ASP.NET Core 微服务实战》-- 读书笔记(第7章)
  6. java 实现 常见排序算法(四)基数排序
  7. (04)VTK移动模型,判断是否相交
  8. 【转载】MyBatis+MySQL 返回插入的主键ID
  9. 扇贝有道180919每日一句
  10. svg动画导致持续占用CPU
  11. 基于LabVIEW和PCI板卡的运动控制实现
  12. 北京市延庆区谷歌卫星地图下载
  13. power BI电商案例分析
  14. windows防火墙ntp服务器_ad域windows ntp服务器配置详解
  15. .NET 6 RC2 版本发布
  16. 计算机笔记检讨,上课没做笔记的反省检讨书范文550字
  17. python 3 5的值_杨桃Python基础教程第5章:Python数据类型(3)列表s[M:n]值,的,三,smn,取值...
  18. テーブルTVARVとTVARVCについて
  19. Effie: 一款属于程序工作者的写作软件
  20. 主成分分析与其在人脸识别中的应用

热门文章

  1. 【DP】翻硬币(jzoj 3921)
  2. 初一模拟赛总结(2019.6.15)
  3. JavaFX 2.1:Toolkit not initialized
  4. 面试时如何介绍自己的项目经验
  5. jdk和cglib简单理解
  6. JAVA面试常考系列十
  7. Java 10的10个新特性,将彻底改变你写代码的方式
  8. 3班的第一次模拟面试
  9. 使用ueditor实现多图片上传案例——Dao层(IShoppingDao)
  10. Android实现动画Dialog