springboot2 缓存抽象(一)

一、为什么使用缓存抽象

1、由于以前操作缓存使用的是JSR-107规范,操作非常复杂

Application
CachingProvider
CachingProvider
CacheManager
CacheManager
不同的Cache
不同的Cache
键值对
键值对

2、Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;

Application
CacheManager
CacheManager
不同名字cache
不同名字cache
键值对
键值对
二、缓存注解

1、Cache| 缓存接口,定义缓存操作。实现有: RedisCache、 EhCacheCache、ConcurrentMapCache等========================

CacheManager缓存管理器,管理各种缓存(Cache)组件
@Cacheable主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,不能使用#result
@CachePut缓存更新,保证方法被调用,又希望结果被缓存。
@CacheEvict清空缓存
@EnableCaching开启基于注解的缓存
keyGenerator缓存数据时key生成策略
serialize缓存数据时value序列化策略

2、@Cacheable/@CachePut/@CacheEvict 主要的参数===========================

value缓存的名称,在 spring 配置文件中或者方法上定义,必须指定至少一个例如:@Cacheable(value=”mycache”) 或者@Cacheable(value={”cache1”,”cache2”}
key缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合例如:@Cacheable(value=”testcache”,key=”#userName”)
condition缓存的条件,可以为空,使用 SpEL 编写,返回 true或者 false,只有为 true 才进行缓存/清除缓存,在调用方法之前之后都能判断例如:@Cacheable(value=”testcache”,condition=”#userName.length()>2”)
allEntries (@CacheEvict )是否清空所有缓存内容,缺省为 false,如果指定为true,则方法调用后将立即清空所有缓存例如:@CachEvict(value=”testcache”,allEntries=true)
beforeInvocation(@CacheEvict)是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存例如:@CachEvict(value=”testcache”,beforeInvocation=true)
unless(@CachePut)(@Cacheable)用于否决缓存的,不像condition,该表达式只在方法执行之后判断,此时可以拿到返回值result进行判断。条件为true不会缓存, fasle才缓存例如:@Cacheable(value=”testcache”,unless=”#result ==null”)

3、Cache SpEL available metadata

名字位置描述示例
methodNameroot object当前被调用的方法名#root.methodName
methodroot object当前被调用的方法#root.method.name
targetroot object当前被调用的目标对象#root.target
targetClassroot object当前被调用的目标对象类#root.targetClass
argsroot object当前被调用的方法的参数列表#root.args[0]
cachesroot object当前方法调用使用的缓存列表(如@Cacheable(value={“cache1”,“cache2”})), 则有两个cache#root.caches[0].name
argument nameevaluation context方法参数的名字. 可以直接 #参数名 ,也可以使用 #p0或#a0 的形式, 0代表参数的索引;#iban 、 #a0 、 #p0
resultevaluation context方法执行后的返回值(仅当方法执行之后的判断有效,如‘unless’, ’cache put’的表达式 ’cache evict’的表达式 beforeInvocation=false)#result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 提供了多种本地缓存的解决方案,其中比较常用的是 Spring Cache。 Spring Cache 是 Spring Framework 提供的缓存抽象层,它可以与多个缓存实现进行集成,包括常见的 Ehcache、Redis、Caffeine 等。通过使用 Spring Cache,我们可以在应用中方便地添加缓存功能,提升系统性能和响应速度。 下面是使用 Spring Cache 的基本步骤: 1. 在 Spring Boot 项目的 pom.xml 文件中添加所需的缓存实现库的依赖,例如 Ehcache、Redis 或 Caffeine。 2. 在应用的配置文件(application.properties 或 application.yml)中配置缓存相关的属性,如缓存类型、缓存过期时间等。 3. 在需要添加缓存的方法上使用 `@Cacheable` 注解。该注解标识方法的返回值可以被缓存,当再次调用该方法时,如果参数相同且缓存中存在对应的结果,则直接返回缓存中的数据,而不执行方法体内的逻辑。 4. 可以使用 `@CachePut` 注解来更新缓存,它会在方法执行后将返回值放入缓存中。 5. 使用 `@CacheEvict` 注解可以从缓存中删除某个键的数据,可以指定要删除的键或清空整个缓存。 6. 可以通过在方法上使用 `@CacheConfig` 注解来统一配置缓存的公共属性,如缓存名称、缓存管理器等。 需要注意的是,使用 Spring Cache 需要提前配置好所需的缓存实现,例如在使用 Ehcache 时需要编写 Ehcache 的配置文件,或者在使用 Redis 时需要配置 Redis 的连接信息。 以上是关于 Spring Boot 本地缓存的简要介绍,更详细的配置和使用方法可以参考 Spring Boot 和 Spring Cache 的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值