原理:基于Proxy/AspectJ动态代理技术的AOP思想(面向切面编程)
使用

  1. SpringCache包含两个顶级接口,Cache(缓存)和CacheManager(缓存管理器),顾名思义,用CacheManager去管理一堆Cache。
  2. spring cache实现有基于XML/注解实现AOP;
  3. CacheManager负责对缓存的增删改查, CacheManager的缓存的介质可配置, 如:ConcurrentMap/EhCache/Redis等。当没有加入EhCache或者Redis依赖时默认采用concurrentMap实现的缓存,是存在内存中,重启服务器则清空缓存

pring Cache中的注解主要有如下五个:

  • @Cacheable:缓存数据或者获取缓存数据
  • @CachePut:修改缓存数据
  • @CacheEvict: 清空缓存
  • @CacheConfig:统一配置@Cacheable中的value值
  • @Caching:组合多个Cache注解

1.@Cacheable

先从value中获取为key的缓存,如果存在直接返回;如果不存在则执行方法并返回,且把返回输出存入缓存。(注意:保存的数据是return返回的数据)
主要有三个参数:

  • value:缓存的名称,可以多个 (必填,也可以用@CacheConfig替代)
 @Cacheable(value="testcache")@Cacheable(value={"testcache1","testcache2"}
  • key:缓存的 key,按照 SpEL 表达式编写,为空时默认为方法的入参(value相当于缓存空间的名称,而key相当于是一个缓存值的名字)
@Cacheable(value="testcache",key="#id")
  • condition:缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false
@Cacheable(value="testcache",condition="#id.length()>2")

2.@CachePut

根据value中获取为key的缓存,如果存在则修改;不存在则新增
主要是三个参数
value,key,condition如上所示。

注意:保存的数据是return返回的数据,如下返回的有user对象和null,第一个缓存的数据是实体类,第二个缓存的数据是空

3.@CacheEvict

根据对应的value和key删除缓存,没有key值则删除value中所有的缓存
主要有五个参数value,key,condition,allEntries,beforeInvocation

  • allEntries:是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存
@CachEvict(value="testcache",allEntries=true)

图一、会清空getData下面所有缓存(allEntries=true则删除所有)

图二、只会清空getData下面key值为id的缓存(没有key默认取入参)

图三、不会清空任何缓存

  • beforeInvocation: 是否在方法执行前就清空,缺省为 false,如果指定为
    true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存(注:作用只有一个,就是先清空缓存再执行方法
@CachEvict(value="testcache",beforeInvocation=true)

4.@CacheConfig

相当于把类下面所有方法@Cacheable中的value值放到@CacheConfig注解中,
如果@Cacheable中没有value值则用@Cacheable中的值;如果@Cacheable中有value值则以value值为准。

复制代码
@CacheConfig("testcache")
public class UserServiceImpl implements  UserService{@Cacheablepublic Result findById(Long id) {}@Cacheablepublic Result findByIdAndName(Long id,String name) {}

5.@Caching

组合注解,可以组合多个注解

@Caching(put = {@CachePut(value = "user", key = "#user.id"),@CachePut(value = "user", key = "#user.username"),@CachePut(value = "user", key = "#user.email")
})
public User save(User user) {}

Spring 自带缓存Spring Cache相关推荐

  1. spring 缓存(spring自带Cache)(入门)源码解读

    spring自带的缓存类有两个基础类:Cache(org.springframework.cache.Cache)类,CacheManager(org.springframework.cache.Ca ...

  2. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  3. 8 -- 深入使用Spring -- 5...1 启用Spring缓存

    8.5.1 启用Spring缓存 Spring配置文件专门为缓存提供了一个cache:命名空间,为了启用Spring缓存,需要在配置文件中导入cache:命名空间. 导入cache:命名空间之后,启用 ...

  4. 基于Spring的Web缓存

    缓存的基本思想其实是以空间换时间.我们知道,IO的读写速度相对内存来说是非常比较慢的,通常一个web应用的瓶颈就出现在磁盘IO的读写上.那么,如果我们在内存中建立一个存储区,将数据缓存起来,当浏览器端 ...

  5. Spring Boot使用缓存功能

    缓存的好处不言而喻,比如查询商品的价格,如果可以放到缓存中,而不用每次都到数据库中查询,这将会大大提升系统性能,因为和缓存交互比访问数据库要快很多.或者在缓存中存放临时数据,而不用放到数据库中. 在学 ...

  6. spring源码分析之cache注解

    Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如EHCache 或者 OSCache),而是一个对缓存使用的抽象 ...

  7. 缓存插件 Spring支持EHCache缓存

    Spring仅仅是提供了对缓存的支持,但它并没有任何的缓存功能的实现,spring使用的是第三方的缓存框架来实现缓存的功能.其中,spring对EHCache提供了很好的支持. 在介绍Spring的缓 ...

  8. Spring 3.1缓存和@Cacheable

    缓存在软件领域已经存在很长时间了. 它们是那些真正有用的东西之一,一旦您开始使用它们,您会想知道如果没有它们,您是如何相处的,所以似乎让Spring的家伙们只是在版本中向Spring核心添加缓存实现有 ...

  9. Spring Boot————默认缓存应用及原理

    引言 应用程序的数据除了可以放在配置文件中.数据库中以外,还会有相当一部分存储在计算机的内存中,这部分数据访问速度要快于数据库的访问,因此通常在做提升数据访问速度时,会将需要提升访问速度的数据放入到内 ...

最新文章

  1. golang channel 管道
  2. 怎样和客户一起搞定需求
  3. 学习OpenStack之 (4): Linux 磁盘、分区、挂载、逻辑卷管理 (Logical Volume Manager)
  4. Python eval 与 exec 函数的区别 - Python零基础入门教程
  5. Pycharm中设置py文件头部注释信息
  6. 特斯拉AI Day首秀:FSD终极进化?AI超算Dojo、D1芯片、人形机器人亮相!
  7. linux中代码挂上n,Linux系统常用命令nl详解(示例代码)
  8. 暑假周进度总结报告3
  9. Nodejs - 如何用 eventproxy 模块控制并发
  10. 中国人工智能学会通讯——KS-Studio:一个知识计算引擎 1.4 结束语
  11. rostcm6情感分析案例分析_ROSTCM6 情感分析软件 这款软件能分析文章中所表达的情绪内容 从而帮助使用者得出文章的情绪 - 下载 - 搜珍网...
  12. 数据结构考研:线性表,顺序表,有序表,链表,数组的概念的区别与联系(软件工程/计算机/王道论坛)
  13. 加速计/陀螺仪/磁力计是什么,3轴/6轴/9轴传感器又是什么?
  14. Mac电脑高质量神器——超级右键
  15. 彻底卸载CAD或者其他任何软件、删除注册表的神奇-YourUninstallerPortable.exe
  16. 网络头衔CEO、COO、CFO、CTO是什么意思?
  17. 前后端分离,SpringBoot如何实现验证码操作
  18. 解决百度网盘刷新不出来二维码
  19. 直接插入排序顺序结构
  20. 风影ASP.NET基础教学 4 验证控件

热门文章

  1. 阅读笔记-Modulation and Coding Design for Simultaneous Wireless Information and Power Transfer
  2. KSZ8873MLLV在AURIX平台的应用
  3. matlab中total函数用法,SUBTOTAL函数的用法及实列
  4. OSI七层模型以及TCP/UDP客户端/服务端程序实例
  5. HTML中Pre标签
  6. 加油!为自己打气-做好当下,立足长远
  7. 腾讯云mysql高可用方案_腾讯云数据库团队:MySQL数据库的高可用性分析
  8. Nodejs开发技巧集锦(4):使用multiparty获取上传的表单文件
  9. tomcat升级到10后启动报错
  10. 为什么你总抓不住机会