学透 Spring:从入门到项目实战
丁雪丰
美团研究员
1073 人已学习
立即订阅
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
时长 07:11
时长 15:51
时长 00:10
时长 02:03
时长 00:39
学透 Spring:从入门到项目实战
15
15
1.0x
00:00/00:00
登录|注册

第 8 章 数据访问进阶(2)

8.3 Spring 的缓存抽象

我们一般是按照图 8-3 的步骤来使用缓存数据的:第一次进入代码段,判断缓存中是否有需要的数据,如果存在就用缓存里的,如果不存在就从数据库或其他地方读取数据并放入缓存,这样下次就能从缓存获取数据了。当然,这里还要考虑缓存内容过期、超过缓存上限时内容淘汰、数据写入缓存时是否加锁等问题。
图 8-3 一般的缓存操作流程
我们将这个过程抽象一下,缓存的常见操作无非就是判断是否存在、读取、写入和淘汰,真希望有一套框架能自动缓存特定方法的返回值,这样就不用我们再自己写代码了。Spring Framework 恰好就提供了这么一层缓存抽象。

8.3.1 基于注解的方法缓存

Spring Framework 3.1 引入了一套缓存抽象,它通过注解或者 XML 的方式配置到方法上,每次执行方法就会在缓存里做一次检查,看看是否已经用当前参数调用过这个方法了,如果调用过并且有结果在缓存里了,就不再执行实际的方法调用,而是直接返回缓存值;如果没调用过,就进行调用,并缓存结果。这样一来,就可以自动避免反复执行一些开销很大的方法了。
请注意 这里有两点需要着重说明一下:
这套缓存抽象背后是通过 AOP 来实现的,即在实际对象外面包了一层代理,由代理来完成缓存操作,所以必须访问代理后的对象;
只有那些可幂等操作的方法才适用于这套抽象,因为必须要保证相同的参数拥有一样的返回值。
从 Spring Framework 4.1 版本开始,这套缓存抽象还提供了对 JSR-107 注解的支持。在本节中,我们就着重讨论基于注解的方法缓存。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Spring Framework中的缓存抽象,着重讨论了基于注解的方法缓存。通过详细讲解Spring Framework提供的缓存抽象注解,包括`@Cacheable`、`@CachePut`、`@CacheEvict`、`@Caching`和`@CacheConfig`,以及它们的属性和用法,读者可以快速了解Spring Framework中基于注解的方法缓存的使用方法和注意事项。文章还展示了如何激活Spring Framework对缓存抽象的支持,包括使用`@EnableCaching`注解或在XML配置文件中使用`<cache:annotation-driven/>`标签。通过一个菜单服务类的例子,读者可以了解如何在实际应用中使用基于注解的方法缓存。此外,还讨论了如何替换不同的缓存实现,包括内置的几个`CacheManager`实现以及如何替换为Caffeine和Redis。总的来说,本文通过清晰的示例和详细的讲解,帮助读者快速了解了Spring Framework中基于注解的方法缓存的使用方法和注意事项。文章还在结尾部分对数据库相关的话题进行了小结,并展望了下一章的内容。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部