Spring Cache详解

本文详细介绍了Spring Cache的使用,包括Cache的简介、注解的详细解释,如@Cacheable、@CachePut和@CacheEvict。文章还涵盖了EL表达式的应用以及Spring Cache在实际项目中的配置和应用步骤,例如yml配置、缓存配置、业务层创建等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一节 Spring Cache介绍

1. Spring Cache 简介

从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。

Spring Cache是作用在方法上的,其核心思想是这样的:

当调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候要保证缓存的方法对于相同的方法参数要有相同的返回结果。

2. Spring Cache 注解

Spring为我们提供了几个注解来支持Spring Cache。其核心主要是@Cacheable@CacheEvict

2.1 @Cacheable

@Cacheable可以标记在一个方法上,也可以标记在一个类上。

  • 当标记在一个方法上时表示该方法是支持缓存的

  • 当标记在一个类上时则表示该类所有的方法都是支持缓存的

对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。需要注意的是当一个支持缓存的方法在对象内部被调用时是不会触发缓存功能的。

在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行并将返回结果存入指定的缓存中。

@Cacheable常用属性有4个:cacheNames、keyGenerator、condition 和 unless。

  • cacheNames

    cacheNames属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称。其可以是一个Cache也可以是多个Cache,当需要指定多个Cache时其是一个数组

  • keyGenerator

    keyGenerator属性是用来指定缓存数据时使用的键,当没有指定该属性时,Spring将使用默认策略生成key

  • condition

    condition属性表示缓存的条件,这个条件与查询的参数有关。当有些查询条件不需要缓存时,可以通过condition来实现过滤。condition属性默认为空,表示将缓存所有的调用情形。

  • unless

    unless属性表示缓存的条件,这个条件与查询的结果有关。当有些查询结果不需要缓存时,可以通过unless来实现过滤。unless属性默认为空,表示将缓存所有的调用情形。

2.2 @CachePut

@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是:使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

2.3 @CacheEvict

@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。

@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。

  • value: value表示清除操作是发生在哪些Cache上的(对应Cache的名称)

  • key: key表示需要清除的是哪个key,如未指定则会使用默认策略生成的key

  • condition: condi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值