mysql caching_Spring Caching抽象和Google Guava Cache

mysql caching

Spring为缓存昂贵的方法调用提供了强大的现成支持。 这里详细介绍了缓存抽象。

我的目标是使用Spring Guava Cache涵盖Spring现在提供的4.0+版本的较新的缓存实现之一。

简而言之,请考虑一种具有几种慢速方法的服务:

public class DummyBookService implements BookService {@Overridepublic Book loadBook(String isbn) {// Slow method 1.}@Overridepublic List<Book> loadBookByAuthor(String author) {// Slow method 2}}

借助Spring Caching抽象,可以通过沿这些行的方法注释来加快具有相同参数的重复调用–在这里,loadBook的结果被缓存到“ book”缓存中,而缓存的图书清单又被缓存到另一个“ books”中快取:

public class DummyBookService implements BookService {@Override@Cacheable("book")public Book loadBook(String isbn) {// slow response time..}@Override@Cacheable("books")public List<Book> loadBookByAuthor(String author) {// Slow listing}
}

现在,对缓存抽象的支持需要一个CacheManager可用,该CacheManager负责管理底层缓存以存储缓存的结果,而对于新的Guava Cache支持,CacheManager遵循以下原则:

@Bean
public CacheManager cacheManager() {return new GuavaCacheManager("books", "book");
}

Google Guava Cache提供了丰富的API,可以预加载缓存,根据上次访问或创建时间设置驱逐时间,设置缓存的大小等,如果要自定义缓存,则可以传递guava CacheBuilder到CacheManager进行此自定义:

@Bean
public CacheManager cacheManager() {GuavaCacheManager guavaCacheManager =  new GuavaCacheManager();guavaCacheManager.setCacheBuilder(CacheBuilder.newBuilder().expireAfterAccess(30, TimeUnit.MINUTES));return guavaCacheManager;
}

如果所有缓存都具有相似的配置,则此方法效果很好,如果需要对缓存进行不同的配置(例如),该怎么办。 在上面的示例中,我可能希望“书”缓存永不过期,但“书”缓存具有30分钟的过期时间,那么GuavaCacheManager抽象不能很好地工作,相反,更好的解决方案实际上是使用SimpleCacheManager提供了一种更直接的方法来获取缓存,并且可以通过以下方式进行配置:

@Bean
public CacheManager cacheManager() {SimpleCacheManager simpleCacheManager = new SimpleCacheManager();GuavaCache cache1 = new GuavaCache("book", CacheBuilder.newBuilder().build());GuavaCache cache2 = new GuavaCache("books", CacheBuilder.newBuilder().expireAfterAccess(30, TimeUnit.MINUTES).build());simpleCacheManager.setCaches(Arrays.asList(cache1, cache2));return simpleCacheManager;
}

如果需要,可以将某些缓存配置为由不同的缓存引擎本身来支持,例如简单的哈希映射,一些由Guava或EhCache进行支持,而某些由分布式缓存(如Gemfire)支持,则此方法非常有效。

翻译自: https://www.javacodegeeks.com/2014/11/spring-caching-abstraction-and-google-guava-cache.html

mysql caching

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

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

相关文章

多线程程序中操作的原子性

0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念&#xff0c;它常常用来实现一些同步机制&#xff0c;同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题&#xff1a;1. 多线程程序中对变量的读写操作是否是原子的&#xff1f;2. 多…

2018秋计算机基础在线作业华师,18秋华师《计算机基础》在线作业3(标准答案).doc...

【奥鹏】[华中师范大学]华师《计算机基础》在线作业试卷总分:100 得分:100第1题,控制面板可实现__________。A、对计算机全面控制操作B、对硬件驱动、软件设置及Windows外观设置C、计算机的关闭操作D、删除计算机中的任意文件正确答案:B第2题,页眉和页脚的建立方法相似&#xf…

.net mvc actionresult 返回字符串_ASP.NET Core中的Action的返回值类型

在Asp.net Core之前所有的Action返回值都是ActionResult&#xff0c;Json(),File()等方法返回的都是ActionResult的子类。并且Core把MVC跟WebApi合并之后Action的返回值体系也有了很大的变化。ActionResult类ActionResult类是最常用的返回值类型。基本沿用了之前Asp.net MVC的那…

.jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API

.jdeveloper介绍 最新版本的JDeveloper 12c&#xff08;12.1.3.0&#xff09;和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上&#xff0c;从12.1.2.0版本开始就支持WebSocket协议&#xff08;RFC 645…

为什么程序员需要关心顺序一致性,而不是 Cache 一致性?

本文所讨论的计算机模型是Shared Memory Multiprocessor&#xff0c;即我们现在常见的共享内存的多核CPU。本文适合的对象是想用C 或者Java进行多线程编程的程序员。本文主要包括对Sequential Consistency和Cache Coherence的概念性介绍并给出了一些相关例子&#xff0c;目的是…

南科大计算机科学与技术专业如何,广州大学、深圳大学、汕头大学、南方科技大学,如何排名?...

广州大学、深圳大学、汕头大学和南方科技大学都是广东省内的一流大学。为了方便各位广东考生在填报志愿的时候有一个更好的了解&#xff0c;顺哥收集整理了这4所学校的一些信息。希望能帮助到大家。深圳大学2021年校友会排名省内第4&#xff0c;全国第57&#xff0c;中国一流大…

canoco5冗余分析步骤_打造高性能的大数据分析平台

大数据时代&#xff0c;大数据的应用与挖掘&#xff0c;大数据的分析和决策&#xff0c;大数据在经济社会的运行轨道上发挥着愈来愈重要的作用。对于大数据分析&#xff0c;现在好多互联网金融公司和传统的商业银行、证券基金公司都非常看重。个个都想在大数据分析中获得重要信…

C 迭代器iterator的实现原理

在经典的设计模式中&#xff0c;有一种迭代器模式&#xff0c;定义为&#xff1a;提供一个对象来顺序访问聚合对象中的一系列数据&#xff0c;而不暴露聚合对象的内部表示。迭代器的主要优点如下&#xff1a;访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器…

html如何在画布上加层,在Canvas中嵌套Html

大概是这样的&#xff0c;现在需要根据一下上传的图片以及一些输入生成图片。本来打算用imagemagick的&#xff0c;但是后来觉得这样前后端要搞两份不同的代码&#xff0c;然后imagemagick使用起来远没有canvas用起来顺手啊。So&#xff0c;最终决定就用Canvas搞定它了&#xf…

如何用illustrator做技术手册_做期货用什么技术指标分析?

来源&#xff1a;期汇股金作者&#xff1a;DC链接&#xff1a;做期货用什么技术指标分析&#xff1f;投资期货市场首先我们要有一套自己的技术分析&#xff0c;那么我们有什么样的技术指标分析最准确呢&#xff0c;没有最准确的技术指标&#xff0c;要看你运用的程度&#xff0…

根据字符串自动构造对应类

问题的起因是&#xff0c;我在做一个demo&#xff0c;有一个对象基类&#xff0c;以及一堆派生出的子对象&#xff0c;比如球体、立方体之类的对象。还有一个对象管理类&#xff0c;用于存储场景中的所有对象。那么在初始化的时候&#xff0c;代码是这么写的&#xff1a;class …

openshift k8s_带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8

openshift k8sDIY盒带是一种实验性盒带&#xff0c;提供了一种在OpenShift上测试不受支持的语言的方法。 它提供了最小限度的自由形式的支架&#xff0c;将墨盒的所有细节留给了应用程序开发人员 。 这篇博客文章说明了结合了PostgreSQL服务的Spring Boot / Java 8 / Tomcat 8应…

都兰县第一中学计算机,都兰县第一中学教案.doc

PAGE \* MERGEFORMATPAGE \* MERGEFORMAT 1都兰县第一中学教案班级初一.班周次9时间45分钟课时2授课教师席得勋教学内容篮球&#xff1a;胸前双手传接球器 材篮球25个、栏架4个、垫子4个、长凳4个、标志桶4个教学目标运动参与目标:通过学习激发学生兴趣&#xff0c;使学生积极参…

.sql文件如何执行_mysql:一条SQL查询语句是如何执行的?

本篇文章将通过一条 SQL 的执行过程来介绍 MySQL 的基础架构。首先有一个 user_info 表&#xff0c;表里有一个 id 字段&#xff0c;执行下面这条查询语句&#xff1a;select * from user_info where id 1;返回结果为&#xff1a;-------------------------------------------…

jooq和jdbc_在jOOQ之上构建的RESTful JDBC HTTP服务器

jooq和jdbcjOOQ生态系统和社区正在持续增长。 我们个人总是很高兴看到基于jOOQ构建的其他开源项目。 今天&#xff0c;我们非常高兴为您介绍BjrnHarrtell结合REST和RDBMS的一种非常有趣的方法。 BjrnHarrtell从小就是瑞典的程序员。 他通常在Sweco Position AB上忙于编写GIS系…

C 虚函数表及多态内部原理详解

C 中的虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”&#xff0c;这是一种泛型技术。虚函数表每个含有虚函数的类都…

html代码编辑器sp,在线HTML编译,文本关键字高亮显示,富文本编辑实现大概思路...

????最近被安排做了一个HTML在线编译功能&#xff0c;也利用这个机会对HTML在线编译&#xff0c;关键字高亮&#xff0c;富文本编辑器等的实现做了一些比较表面的研究&#xff0c;做简要记录&#xff0c;以便再次遇到作为参考。????在线HTML编译????首先需要一个能…

numpy 平方_NumPy入门指南

本文介绍了NumPy的基础知识&#xff0c;NumPy是使用Python进行科学计算的软件包。我们将在此处介绍几类基本的数组操作&#xff1a; 创建NumPy数组 重塑数组 NumPy的数学运算 数组的索引和切片 遍历数组首先&#xff0c;让我们将NumPy导入为np。 这使我们可以使用快捷方式np来引…

android 揭示动画_揭示垃圾收集暂停的时间长度

android 揭示动画有几种方法可以改善您的产品。 一种这样的方法是仔细跟踪用户的体验并在此基础上进行改进。 我们确实自己应用了此技术&#xff0c;并再次花了一些时间查看不同的数据 除了我们追求的许多其他方面之外&#xff0c;我们还提出了一个问题“延迟GC触发应用程序的…

10 张程序员喜爱的壁纸,需要自取~

喜欢的话就请点个再看&#xff0c;分享到朋友圈吧~