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

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

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

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

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

spring缓存

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

  1. 记忆化搜索 递归缓存_需要微缓存吗? 营救记忆

    记忆化搜索 递归缓存 缓存解决了各种各样的性能问题. 有很多方法可以将缓存集成到我们的应用程序中. 例如,当我们使用Spring时,可以轻松使用@Cacheable支持. 非常简单,但我们仍然必须配置 ...

  2. js 引入 缓存_引入故意缓存

    js 引入 缓存 几周前,我参加了ThoughtWorks 技术雷达研讨会. 我在ThoughtWorks工作了多年,并认为如果有人知道这些人在软件开发方面的发展趋势如何. 在技​​巧上带有上升箭头的 ...

  3. Java怎么使用spring定时器_浅析spring定时器的使用

    原生的Java定时器 使用Java.util包下的定时器也很简单,具体代码如下: //设置定时器开始时间 Date time = sdf.parse("2020-10-01 16:40:00 ...

  4. 交换机分布缓存_网络交换机缓存在数据中心的作用

    什么产生了缓存?网络交换机要配置多少缓存才够用?缓存容量是否有标准可以衡量? 当网络交换机接口收到超出其所能处理的流量后,它会选择要么将其缓存,或者将其丢弃. 缓存通常都是因为网络接口速率不同造成的, ...

  5. ehcache 手动刷新缓存_清空DNS缓存的两个小方法

    什么是DNS缓存?这个缓存有什么危害?相信大家平时使用浏览器时,有时候会遇到一个很奇怪的问题,就是Mac打开许多网站如百度网站,都是可以访问的,但是在打开某个特定网站时,却发现浏览器提示检测不到网络连 ...

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

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

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

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

  8. java spring上传图片_基于Spring Boot实现图片上传/加水印一把梭操作

    文章共 537字,阅读大约需要 2分钟 ! 概述 很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站.自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现 ...

  9. java 高性能缓存_高性能Java缓存----Caffeine

    简单介绍 Caffeine是新出现的一个高性能的Java缓存,有了它完全可以代替Guava Cache,来实现更加高效的缓存:Caffeine采用了W-TinyLFU回收策略,集合了LRU和LFU的优 ...

最新文章

  1. 有关LocalAlloc,LocalReAlloc,LocalFree,GlobalAlloc,GlobalReAlloc,GlobalFree的模糊点总结
  2. 波士顿动力机器狗再进化:已学会自主规划路线
  3. Access数据库如何批量操作呀 ?
  4. 移植根文件系统到linux内核 s3c2440,u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统...
  5. SKLEARN模型选择
  6. 【Kubernetes】浅析基本概念和原理
  7. input位置_3分钟短文 | PHP 数组任意位置插入新元素,你是怎么处理的?
  8. python下载股票数据_如何下载股票历史数据?
  9. 2022年 电工杯B题5G 网络环境下 应急物资配送问题
  10. Monkey基本命令
  11. ubuntu16.04安装monaco字体
  12. Ubuntu安装mysql-8.0.20-linux-glibc2.12-i686.tar.xz 步骤
  13. CloudMounter——将大容量网盘服务巧妙地挂载到系统文件管理器中
  14. c语言出现源文件未编译,dev运行C语言出问题
  15. 关于冯.诺依曼结构与哈佛结构的一些疑问
  16. 微店开放平台接入指南
  17. 王思聪吃翔项目 - 共享充电宝 - 经营、销售分析系统DB设计实践
  18. RSA算法习题 (采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。)
  19. 普渡大学 计算机科学 期中考试,普渡大学计算机科学理学硕士研究生申请要求及申请材料要求清单...
  20. 合同成立未生效是否能够解除

热门文章

  1. Educational Codeforces Round 107 (Rated for Div. 2)
  2. 牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
  3. [ZJOI2014] 璀璨光华(bfs建图 + dfs搜索)
  4. [费用流]数字配对,新生舞会
  5. nssl1296-猫咪的进化【dp】
  6. ssl1341-Asteroids【最大匹配,最小点覆盖,图论】
  7. 2021牛客暑期多校训练营8 F-Robots(bitset优化dp)
  8. 【图论】清理牛棚/Cleaning Shifts S(luogu 4644)
  9. 【启发式合并】梦幻布丁(金牌导航 启发式合并-1/luogu 3201)
  10. springboot整合spring @Cache和Redis