文章目录

  • 前言
  • @Cacheable 的来源
  • 应用场景
    • 集成Redis的思路
  • 代码及验证
  • 后记

前言

Spring 有很多声明式的编程风格,@Transactional 是,@Cacheable 也是。说起 @Transactional,复杂的事务情况下,这个注解也有局限,需要用到编程式的事务完成需求。同样地,@Cacheable 也是适合简单的缓存场景

@Cacheable 的来源

  • 来自 Spring Framwork - Integration。

    • Spring Framwork - Integration - Cache 官方reference

    在 Integration 项目中,查了下资料,是受 《Enterprise Integration Patterns 》的启发,内容待研究,本文不提。

  • 沿袭官方的称呼,后文把这个包都称为 Cache Abstraction
    • 相关的注解还有

      • @Cacheable: Triggers cache population. 笔记:方法返回值写入缓存
      • @CacheEvict: Triggers cache eviction. 笔记:清除缓存
      • @CachePut: Updates the cache without interfering with the method execution. 笔记:更新缓存,强调不干扰方法执行
      • @Caching: Regroups multiple cache operations to be applied on a method. 笔记:v支持缓存组合操作
      • @CacheConfig: Shares some common cache-related settings at class-level. 笔记:作用其实跟@RequestMapping差不多
    • 缓存的增删改查的修饰,比如缓存名、缓存的key、缓存的value,都声明为注解参数或者方法返回值

      • cacheNames 笔记:缓存名
      • key 笔记:对应缓存名的key
      • keyGenerator 笔记:更详细的key处理方式
      • cacheManager 笔记:非必填,需要了解这个参数的时候再填
      • cacheResolver 笔记:非必填,需要了解这个参数的时候再填

      摘一个原文,提醒互斥的参数不要同时存在在注解上。
      Similarly to key and keyGenerator, the cacheManager and cacheResolver parameters are mutually exclusive, and an operation specifying both results in an exception, as a custom CacheManager is ignored by the CacheResolver implementation. This is probably not what you expect.

应用场景

类比 @Transactional,无论应用集成的是MySQL、Oracle、PostgreSQL,用该注解都能获得事务支持。
同样的,@Cacheable 等注解,背后可以是简单的 ConcurrentHashMap ,也可以是 Redis.

集成Redis的思路

本质上跟 @Transactional 集成 MySQL 没什么太大区别。注意Spring Boot 项目可以很方便的引入 spring-data-redis

  • spring-data-redis 里面有 cacheManager 的实现类注入到容器中,侧面应证了这个项目支持 Cache Abstraction
  • spring-data-redis 官方文档说明,可选两种驱动实现,这里选Jedis
  • spring-data-redis 官方文档说明,注入符合需求的 bean,这里 JedisConnectionFactory
  • 按照 Cache Abstraction 的规范,注入符合需求的 bean,这里注入 RedisCacheManager
  • @EnableCaching 在启动类启用 Cache Abstraction 支持

代码及验证

github
允许单元测试,注意可以断点的方式确认缓存写入、缓存生效(不调用方法内的逻辑)

后记

Cache Abstraction 缓存的增删改查,跟着官网,实现起来都很简单。针对只读的数据,提升响应速度,用这个注解可以让代码更清爽。更高级的用法,比如设置TTL,官网也有例子。在使用redis集群的时候,配合 spring-data-redis,限制就稍微多点,目前觉得这个场景下用这个抽象没有安全感。另外,Spring Boot 或是 Spring 的集成还是很有自己的风格的,看看文档,决定配置,把配置bean注入,集成就完成拉。后续从架构的角度学学 《Enterprise Integration Patterns》,窥探一下 Spring Framwork - Integration 背后参考的架构设计。

【Spring】Spring @Cacheable 官方学习及demo相关推荐

  1. Spring Boot 2.0 配置图文教程第 2 章 Spring Boot 配置## 书信息 demo.book.name=[Spring Boot 2.x Core Action] demo.b

    本章内容 1.自定义属性快速入门 2.外化配置 3.自动配置 4.自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 第 2 章 Spring B ...

  2. Spring Cloud Alibaba 官方中文文档

    Spring Cloud Alibaba 官方中文文档 1. 介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用服务的必需组件,方便开发者通 ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6973266.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(九)--My ...

  4. Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式

    上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...

  5. spring struts2 mybatis框架学习总结(mvc三层架构)

    spring struts2 mybatis框架学习总结(mvc三层架构) ssi的框架主要是由struts2,spring以及ibatis组成,他们负责各层之间的交互与协作,从而实现整个web端的功 ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十)--My ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  9. 搭建eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo

    前言:我这里搭建好eclipse版的ssm+maven+tk.mybatis+redis及mybatis+spring多数据源配置集成的demo.新手快速上手直接看demo. 最后处提供完整高质量de ...

最新文章

  1. 【Java学习笔记之四】java进制转化
  2. 喜大普奔,网易猪肉要到你碗里来了!
  3. LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)
  4. 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)#华为云·寻找黑马程序员#
  5. 以下系统组件依赖此服务器,Maven中配置本地依赖组件包
  6. 从零开始学习使用FPGA控制ADF4351芯片
  7. 向量的方向余弦公式_方向余弦矩阵(DCM)简介
  8. 微软苏州面经:前两面简单,三面困难
  9. springboot基于微信小程序的宿舍管理系统毕业设计源码
  10. 关闭计算机的正确操作方法,电脑基础知识启动和关闭电脑的正确方法
  11. win7老计算机,windows7旗舰版系统电脑老是自动重启的原因汇总
  12. 【NLP】情绪分析与酒店评论
  13. 苏嵌//张福辉//2018.7.24
  14. 【mmdetection系列】mmdetection之backbone讲解
  15. windows上注册控件/反注册控件
  16. 星舟科技终止A股上市辅导,曾在新三板挂牌交易
  17. msn登陆不上,显示默认网关为脱机!
  18. [dp]洛谷 P2331 最大子矩阵
  19. IOS 13.4.1如何绕过验证抓取fidd~HTTPS的数据。
  20. 4-6个月,如何拿下今日头条39W年薪算法offer?

热门文章

  1. 注水问题(最多接水)
  2. 一个好玩的东西,纯JS代码实现增强现实(AR.js)
  3. “网络实名制”的利弊
  4. 微信和支付宝H5扫码支付开发记录
  5. python手势识别控制幻灯片_手把手教你如何实现Python手势识别与控制(含代码及动图)...
  6. 埃及分数(附带注释)
  7. 计算机组成原理存放指令,计算机组成原理 唐朔飞 习题解答
  8. 桌面出现2个计算机,Windows XP桌面总是出现两个相同的快捷方式图标
  9. 本科生出国留学? 看这里!
  10. ios底部栏设计规范_iOS和Android的UI设计规范有啥区别?