使用Caffeine和Spring Boot的多个缓存配置

缓存是几乎每个应用程序性能的关键。 有时需要分布式缓存 ,但并非总是如此。 在许多情况下,本地缓存可以很好地工作,并且不需要分布式缓存的开销和复杂性。

因此,在许多应用程序中,包括普通的Spring和Spring Boot,您可以在任何方法上使用@Cacheable ,并且其结果将被缓存,以便下次调用该方法时,将返回缓存的结果。

Spring有一些默认的缓存管理器实现,但是外部库总是比简单的实现更好,更灵活。 例如,咖啡因是一种高性能的 Java缓存库 。 Spring Boot带有CaffeineCacheManager 。 因此,理想情况下,这就是您所需要的一切–您只需创建一个缓存管理器bean,并为@Cacheable注释方法进行缓存。

但是,提供的缓存管理器仅允许您配置一个缓存规范。 缓存规范包括到期时间,初始容量,最大大小等。因此,将使用单个缓存规范来创建此缓存管理器下的所有缓存。 高速缓存管理器支持预定义高速缓存以及动态创建的高速缓存的列表,但是在两种情况下都使用单个高速缓存规范。 这对于生产来说很少有用。 通常,内置缓存管理器是您必须要小心的地方 。

有一些 博客文章告诉您如何使用自定义规范定义自定义缓存。 但是,这些选项不支持内置管理器支持的动态默认缓存规范用例。 理想情况下,您应该能够使用@Cacheable任何名称,并且应该使用某些默认规范自动创建缓存,但是您还应该选择覆盖特定缓存的名称。

这就是为什么我决定使用一种比在代码中定义所有缓存以提供更大灵活性的简单方法。 它扩展了CaffeineCacheManager以提供该功能:

 /** * Extending Caffeine cache manager to allow flexible per-cache configuration */  public class FlexibleCaffeineCacheManager extends CaffeineCacheManager implements InitializingBean { private Map<String, String> cacheSpecs = new HashMap<>(); private Map<String, Caffeine<Object, Object>> builders = new HashMap<>(); private CacheLoader cacheLoader; @Override public void afterPropertiesSet() throws Exception { for (Map.Entry<String, String> cacheSpecEntry : cacheSpecs.entrySet()) { builders.put(cacheSpecEntry.getKey(), Caffeine.from(cacheSpecEntry.getValue())); } } @Override @SuppressWarnings ( "unchecked" ) protected Cache<Object, Object> createNativeCaffeineCache(String name) { Caffeine<Object, Object> builder = builders.get(name); if (builder == null ) { return super .createNativeCaffeineCache(name); } if ( this .cacheLoader != null ) { return builder.build( this .cacheLoader); } else { return builder.build(); } } public Map<String, String> getCacheSpecs() { return cacheSpecs; } public void setCacheSpecs(Map<String, String> cacheSpecs) { this .cacheSpecs = cacheSpecs; } public void setCacheLoader(CacheLoader cacheLoader) { super .setCacheLoader(cacheLoader); this .cacheLoader = cacheLoader; }  } 

简而言之,它会根据规格创建一个咖啡因生成器,并在需要新的缓存时使用它代替默认生成器。

然后,样本XML配置将如下所示:

 < bean id = "cacheManager" class = "net.bozho.util.FlexibleCaffeineCacheManager" > < property name = "cacheSpecification" value = "expireAfterWrite=10m" /> < property name = "cacheSpecs" > < map > < entry key = "statistics" value = "expireAfterWrite=1h" /> </ map > </ property >  </ bean > 

使用Java配置,它非常简单–您只需设置cacheSpecs映射即可。

尽管Spring已经变成了一个庞大的框架,可以提供各种各样的功能,但它并没有放弃可扩展性的设计原则。

扩展内置框架类经常发生,应该在每个人的工具箱中。 创建这些类时要考虑到扩展名-您会注意到CaffeineCacheManager中的许多方法都protected 。 因此,我们应在需要时利用它。

翻译自: https://www.javacodegeeks.com/2019/05/multiple-cache-configurations-caffeine-spring-boot.html

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

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

相关文章

[渝粤教育] 中原科技学院 设计学和美好生活 参考 资料

教育 -设计学和美好生活-章节资料考试资料-中原科技学院【】 单元测验 1、【单选题】请问最能代表汉族传统的服饰是哪一件&#xff1f; A、DVF裹身裙 B、深衣 C、长信宫灯 D、蜚襳垂髾 参考资料【 】 2、【多选题】古代中国的服饰有哪几层意义&#xff1f; A、保暖 B、审美 C、…

工业级POE交换机技术优势及供电方法详解!

众所周知&#xff0c;不论是任何设备都是需要供电才能运行的&#xff0c;监控摄像头也不例外&#xff0c;传统的视频监控&#xff0c;又或者说传统的供电方式&#xff0c;是需要拉电力线、挖管道&#xff0c;再通过插座接到摄像头上&#xff0c;摄像头才能正常工作。以前的时候…

物联网lora模块应用案例和LoRawan网关通信技术

什么是LoRa LoRa无线通信技术是 Semtech 在2012年开发出来的一款适合物联网使用的射频IC、其设计理念为低功耗、长距离、低成本、网路简单、易于扩展的无线数传技术。 在一般的通信中、通信的距离与功耗成正比、传输距离越远、功耗越高&#xff0c;而LoRa无线通信模块可以实现…

[渝粤教育] 中国传媒大学 政治传播学 参考 资料

教育 -政治传播学-章节资料考试资料-中国传媒大学【】 单元测验 1、【单选题】以下哪个选项是从国家维度认识政治&#xff1f; A、为了保护私有财产和个人自由&#xff0c;人们订立社会契约论&#xff0c;建立了国家 B、社会历史的决定性基础的经济关系决定着统治和从属的关系&…

LoRa模块在物联网中的应用

lora一种LPWAN通信技术&#xff0c;它基于扩频技术而广泛应用于超长距离的无线传输场景中。现在&#xff0c;LoRa主要在全世界433、868、915MHz等自由频带工作。其最大特征是灵敏度高&#xff0c;传输距离长&#xff0c;工作功耗低&#xff0c;网络节点多。 NB-IoT正在积极发展…

飞畅科技-工业级POE交换机解决方案专家

现如今&#xff0c;伴随着智能城市发展的大趋势&#xff0c;IP监控应用的需求也是迅速增长。政府和业主都需要实时监控关键基础设施的状态&#xff0c;工业级POE交换机可以说是成了当下网络监控项目的不二选择。接下来我们就一起来看看工业级POE交换机运用到户外IP监控系统时需…

[渝粤教育] 中国地质大学(武汉) 文化遗产与自然遗产 参考 资料

教育 -文化遗产与自然遗产-章节资料考试资料-中国地质大学&#xff08;武汉&#xff09;【】 随堂测验 1、【单选题】哪位法老建造的阿布辛拜勒神庙 A、塞提一世 B、阿肯纳顿 C、拉美西斯二世 D、图坦卡蒙 参考资料【 】 2、【单选题】因为以下哪项水利工程要搬迁阿布辛拜勒神庙…

ZigBee模块无线传输星形拓扑组网结构简介

zigbee模块无线传输协议的星形拓补是其三种拓补中最简单的拓补结构&#xff0c;包括一个Co-ordinator(zigbee中央协调器)网络节点和多个enddevice(zigbee模块终端)网络节点。每个endevice(zigbee模块终端)网络节点只能与co-ordinator(zigbee模块协调器)网络节点链接通信&#x…

[渝粤教育] 中国海洋大学 求职OMG 参考 资料

教育 -求职OMG-大学生就业指导与技能开发-章节资料考试资料-中国海洋大学【】 第一章测试题 1、【单选题】何时开始准备求职是最好的 A、毕业前三个月 B、毕业后三个月 C、 大三下学期 D、大一下学期 参考资料【 】 2、【单选题】求职的第一步是什么 A、网上投递求职简历 B、电…

jooq 分页排序_将jOOQ与Spring结合使用:排序和分页

jooq 分页排序JOOQ是一个库&#xff0c;可以帮助我们控制SQL。 它可以从我们的数据库生成代码&#xff0c;并允许我们使用其流畅的API来构建类型安全的数据库查询。 本教程前面的部分向我们介绍了如何配置应用程序的应用程序上下文&#xff0c;如何从数据库生成代码以及将CRUD…

工控交换机和工业级交换机是怎么区别的,具体有哪些区别?分别应用在什么领域?

最近&#xff0c;有很多客户朋友对于工控交换机和工业级交换机二者之间了解的不是很清楚&#xff0c;常常误认为二者都是一样的&#xff0c;其实&#xff0c;这是两个完全不同的概念&#xff0c;我们通常说的交换机一般都是指的以太网交换机(排除电信用的程控交换机)。接下来&a…

ZigBee模块通信协议的树形拓扑组网结构

Zigbee无线通信协议的树形拓扑包括Co-ordinator(zigbee模块-协调器)节点、多个Router(zigbee模块-路由器)和Enddevice(zigbee模块-协调器)节点。Co-ordinator(zigbee模块-协调器)连接多个Router(zigbee模块路由器)和Endbeevice(zigbee模块协调器)&#xff0c;并连接多个Router(…

[渝粤教育] 中国矿业大学 恋爱心理学 参考 资料

教育 -恋爱心理学-章节资料考试资料-中国矿业大学【】 随堂测试 1、【单选题】毛泽东作为马克思主义作家&#xff0c;关于爱情提出了哪种观点&#xff1f; A、男女之间是自然的关系 B、爱情是不可以强求的 C、爱的势力难以阻挡 D、爱情绝不是禁欲主义 参考资料【 】 2、【单选题…

固执己见的框架(例如Spring Boot)的危险。 求知代码反转

我们开发人员喜欢抽象。 没有它&#xff0c;我们将无法构建应用程序。 我们的编程学科甚至要求我们对抽象进行编码&#xff0c;并避免将我们的代码耦合到详细的实现。 但是&#xff0c;什么是适合您的应用程序的正确抽象呢&#xff1f; 可悲的是&#xff0c;抽象的选择确实来…

ZigBee模块无线通信组网结构技术之Mesh拓扑网状

zigbee模块通信技术Mesh组网络拓扑包括Co-ordinator(zigbee协调器)节点和多个Router(zigbee模块无线路由)节点和Enddevice(zigbee终端)节点。网络拓扑形式与树形拓扑形式大致相同&#xff1b;然而&#xff0c;根据树形结构&#xff0c;网络网络拓扑是一种拓扑形式&#xff0c;具…

非管理型工业交换机和管理型工业交换机的区别和选择

工业交换机专门为满足灵活多变的工业应用需求而设计&#xff0c;提供一种高性价比工业以太网通讯解决方案。而工业交换机也分为非管理型和管理型两种。那么&#xff0c;非管理型工业交换机和管理型工业交换机有什么区别&#xff0c;我们改如何选择呢?下面就来简单介绍下。 一…

[渝粤教育] 中国科学技术大学 化学实验安全知识 参考 资料

教育 -化学实验安全知识-章节资料考试资料-中国科学技术大学【】 课前必测&#xff01; 1、【单选题】本课程中课堂交流区得分占总得分的&#xff08; &#xff09; A、20% B、30% C、40% D、0 参考资料【 】 2、【单选题】在综合讨论区和老师答疑区发帖时&#xff0c;应注意讨…

亿佰特lora模块在距离测量和定位上的应用

亿佰特lora模块http://www.ebyte.com LoRa技术是Semtech公司采用并且推广的的一种基于扩频技术的超远距离无线传输方案&#xff0c;属于低功耗广域网&#xff08;Low Power Wide Area Network&#xff0c;LPWAN&#xff09;通信技术中的一种。LoRa技术不再受限于传输距离和功耗…

E19系列与E10系列lora扩频技术无线模块选型指南

成都亿佰特电子科技有限公司是一家专注于无线数传通信应用的公司&#xff0c;在射频领域有着丰富的经验&#xff0c;也研发出了很多经典的产品&#xff0c;比如典型的E19和E10系列。 1.E19系列介绍 图1 E19系列无线模块 E19系列有433/868/915MHz射频模块&#xff0c;功率有1W…

工业级交换机的功率和管理功能详解

工业级PoE供电交换机的设备在为一些基于IP的终端传输数据信号的同时&#xff0c;还能为此类设备提供灵活&#xff0c;可靠的电力&#xff0c;最大限度地降低成本。那么&#xff0c;你对工业级交换机的功率和管理功能是否有所了解呢&#xff1f;接下来我们就跟随飞畅科技的小编一…