有关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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年春季 7394-22T政府公共关系 参考试题

试卷编号:7394 座位号 2017——2018学年度第二学期期末考试 政府公共关系试题 2018年7月 一、单选题(每空2分,共30分) 政府公共关系以塑造良好形象和获得公众支持为( ) 。 A. 途径 B. 主体 C. 客体 D. 目标政府公共关系客体的复…

【渝粤教育】国家开放大学2018年春季 8126-21T制药工程 参考试题

编号:8126 座位号 2017~2018学年度第二学期期末考试 制药工程试题 2018年5月 一、名词解释(本大题共4小题,每题5分,共20分)。 生物技术药物 干燥 天然药物 制药工程设计 二、单项选择题(本…

PoE交换机如何才能稳定连接和安全使用?

随着PoE技术的不断发展,PoE交换机目前已经处于非常成熟的阶段,但是由于目前监控市场迫于成本的压力,选用的PoE交换机或者线材品质过于低劣,或者方案设计本身不合理,就会导致采用PoE供电的项目维护的工作量特别大&#…

java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置,目的:(学习视频分享:java视频教程实现代码如下:导入Java。util。收藏品;导入Java。util。LinkedList导入Java。util。列表;导入Java。util。…

javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第3部分

javafx 自定义控件嗨,经过与同事的讨论,我今天决定展示css方法并不是唯一可用于创建自定义控件的方法。 当然,它允许提供一些外观扩展点,但是可以使用代码API使用相同的方法(与向JavaFX的转换)一起使用。 …

【渝粤教育】国家开放大学2018年春季 8625-21T老年心理健康 参考试题

编号:8625 座位号 2017~2018学年度第二学期期末考试 老年心理健康试题 2018年7月 一、名词解释(本大题共6小题,每题5分,共30分) 分神: 选择性思维迟滞: 记忆减退: 注…

【渝粤教育】国家开放大学2018年春季 8659-22T计算机平面设计(1)(2) 参考试题

编号:8659 2017-2018学年度第二学期期末考试 计算机平面设计(1)(2) 试题 2018年5月 一、单项选择题(共 10 小题,每小题4分,共 40 分) 当使用绘图工具时&…

java开发事故如何处理_记一次缓存事故

善于总结,才能更快进步通常,我们队高并发的数据都会进行缓存,而且为了防止缓存过大,通常我们都会把缓存设置一个超时时间,并且会有cache miss机制。本文,我记录一下错误的缓存机制引起的BUG。起因好好的一个…

导轨式网管型工业交换机优势具体在哪里呢?

通过之前的介绍,我们了解到工业交换机可以分为导轨式和机架式、网管型和非网管型结构,那么,导轨式网管型工业交换机具体有哪些优势呢?接下来就由杭州飞畅科技的小编带大家详细了解一下 ,一起来看看吧! 工业…

使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您使用Spring Boot,Spring Cloud和Spring Cloud Config,则…

【渝粤教育】国家开放大学2018年秋季 0017-22T大学英语 参考试题

科目编号:0033 座位号 2018-2019学年度第一学期期末考试 工程数学 试题 2018年 11 月 单选题(本大题共10小题,每小题4分,共计40分) 1.设都是阶矩阵,则下列命题正确的是( &#xff…

【渝粤教育】国家开放大学2018年秋季 0107-21T现代货币金融学 参考试题

科目编号:0133 座位号 2018-2019学年度第一学期期末考试 大学物理 试题 2018年 11 月 单选题(本大题共5小题,每小题4分,共计20分) 静电场的高斯定理表明,静电场是 。 A. 有源场 B. 无源场 C. 保守力场 D.…

java session 同步_session同步

对于大型分布式网站来说,一个业务后面往往对应着多台服务器。用户的请求将在不同的服务器之间进行跳转,这样的情形下,我们就需要保持session在不同服务器之间的同步。1、基于数据库的session共享。原理:使用数据库专门用来存储ses…

二层网络和三层网络的区别

大家经常可以听到二层网络、三层网络的说法,我们这里提到的二层、三层是按照逻辑拓扑结构进行的分类,并不是ISO七层模型中的数据链路层和网络层,而是指核心层、汇聚层和接入层。这三层都部署的就是三层网络结构,二层网络结构没有汇…

从外部CorDapp扩展和覆盖流

Corda 4于上周(2月21日)发布,带来了大量的新功能,使Corda的使用更加愉快。 老实说,我有点假设有很多新功能。 我快速浏览了变更日志,主要是看到我的贡献被引用,但是我记得看到很多文本行。 那一…

【渝粤教育】国家开放大学2018年秋季 0233-21T学前儿童语言教育 参考试题

科目编号:0248 座位号 2018-2019学年度第一学期期末考试 电工电子技术 试题 2019年 1月 一、填空题(每小题 6 分 ,共计30 分) 1.电压是衡量电场力______________ 的物理量,它在数量上等于单位正电荷受电场力作用从电…

工业级光纤收发器的单多模光纤?单多光模块及其用法?

光纤收发器按在光纤中的传输模式可分为:单模光纤和多模光纤,单模光纤收发器和多模光纤收发器最根本的区别就是传输距离远近。今天,就由飞畅科技的小编来为大家介绍下工业级光纤收发器的单/多模光纤的区别?单/多光模块的区别及其应…

【渝粤教育】国家开放大学2018年秋季 0299-21T中国古代文学(1) 参考试题

科目编号:[0314] 座位号 2018-2019学年度第一学期期末考试 兽医基础 试题 2018年 11 月 一、名词解释(本大题共5小题,每小题4分,共计20分) 1.萎缩 2.动脉性充血 3.黄疸 4&#x…

java ee13_一口气了解多线程及其Java实现

进程:进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间不干扰。同时进程保存着程序每一个时刻运行的状态。程序:用某种编程语言(java、python等)编写,能够完成一定任务或者功能的代码集合&#…

apache camel_Apache Camel中的断路器模式

apache camel骆驼通常在分布式环境中用于访问远程资源。 远程服务可能由于各种原因和期间而失败。 对于短时间后暂时不可用且可恢复的服务,重试策略可能会有所帮助。 但是某些服务可能会失败或挂起更长时间,从而使调用应用程序无响应且速度缓慢。 防止级…