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

我的目的是要介绍Spring现在为框架的4.0+版本提供的较新的缓存实现之一-使用Google Guava Cache

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

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

Spring Caching抽象和Google Guava Cache相关推荐

  1. mysql caching_Spring Caching抽象和Google Guava Cache

    mysql caching Spring为缓存昂贵的方法调用提供了强大的现成支持. 这里详细介绍了缓存抽象. 我的目标是使用Spring Guava Cache涵盖Spring现在提供的4.0+版本的 ...

  2. 正则表达式 guava_带有正则表达式模式的Google Guava Cache

    正则表达式 guava 最近我看到了一个关于Google Guava的不错的介绍 ,我们在我们的项目中得出结论,使用它的缓存功能真的很有趣. 让我们看一下regexp Pattern类及其编译功能 . ...

  3. 带有正则表达式模式的Google Guava Cache

    最近我看到了一个关于Google Guava的精彩演讲 ,我们在我们的项目中得出结论,使用它的缓存功能真的很有趣. 让我们看一下regexp Pattern类及其编译功能 . 在代码中经常可以看到,每 ...

  4. (翻译)Google Guava Cache

    翻译自Google Guava Cache This Post is a continuation of my series on Google Guava, this time covering G ...

  5. guava_使用Google Guava Cache进行本地缓存

    guava 很多时候,我们将不得不从数据库或另一个Web服务获取数据或从文件系统加载数据. 在涉及网络呼叫的情况下,将存在固有的网络延迟,网络带宽限制. 解决此问题的方法之一是在应用程序本地拥有一个缓 ...

  6. 使用Google Guava Cache进行本地缓存

    很多时候,我们将不得不从数据库或另一个Web服务获取数据或从文件系统加载数据. 在涉及网络呼叫的情况下,将存在固有的网络等待时间,网络带宽限制. 解决此问题的方法之一是在应用程序本地拥有一个缓存. 如 ...

  7. Google Guava Cache高效本地缓存

    目录 Guava Cache使用需求和场景 需求 场景 缓存设置 缓存的并发级别 缓存的初始容量设置 设置最大存储 缓存清除策略 基于存活时间的清除策略 基于容量的清除策略 基于权重的清除 策略 显式 ...

  8. Google guava cache源码解析1--构建缓存器(3)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 下面介绍在LocalCache(CacheBuilder, CacheLoader)中调用的一些方法: Ca ...

  9. Google guava cache源码解析1--构建缓存器(2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. CacheBuilder-->maximumSize(long size) /*** 指定cache中 ...

最新文章

  1. 随风迎 jmeter下TPS插件的安装(转)
  2. Heartbeat+DRBD+NFS案例详解
  3. Python max() 函数
  4. Kerberos的原理 - MIT
  5. 边缘使用 K8s 门槛太高?OpenYurt 这个功能帮你快速搭建集群!
  6. 如何使用Web of Science进行文献追踪?
  7. c# 窗口句柄问题 。
  8. C++回声服务器_4-UDP connect版本客户端
  9. C++ 二进制文件读操作
  10. 逻辑回归分类python实例_Python逻辑回归原理及实际案例应用
  11. 暴风集团冯鑫因涉嫌犯罪被采取强制措施 蓝港互动王峰:等他出来喝酒
  12. 依图要修AI语音双学位,左手摸底考第一名成绩单,右手开放平台方案
  13. 华为机试HJ17:坐标移动
  14. sqlite 数据库 boolean类型的小小测试
  15. ROS会议 ROSCon 2017
  16. syn重发_SYN***原理及处理
  17. vulnhub-Tiki - 类oscp靶机攻略1
  18. SDS新书的来龙去脉 amp;amp; SDS序言 - 倪光南:众筹出书也是一种创新
  19. jQuery淡入浅出
  20. 安卓统一推送联盟成立!不卡顿的安卓系统终于来了!

热门文章

  1. toString()
  2. JS进行性能测试(计时)
  3. 河北省计算机对口高考大纲,河北省普通高等学校对口招生英语考试大纲
  4. 运河杯交通违章 运行不起来
  5. qq空间说说服务器维护,如何解决QQ空间说说发表不了
  6. python发送邮件 退回_python 发送邮件(收到的邮件要有发送方才能回复)
  7. python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...
  8. ReviewForJob——java虚拟机的垃圾回收策略(个人总结)
  9. java联接pg库_成为Java流大师–第5部分:将联接的数据库表转换为流
  10. 项目不能使用fn标签_无服务器,Java和FN项目的第一步