最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:SpringBoot3.2.5
1. 简介
Spring Cache是Spring框架提供的一整套缓存解决方案,它不是具体的缓存实现,而是提供了接口、代码规范、配置和注解等,用于整合各种缓存方案如Caffeine、Guava Cache、Ehcache、Redis等。通过使用Spring Cache,可以显著提高应用程序的性能,因为它允许将常用数据缓存在内存中,避免了重复的数据库查询或计算,从而减少了响应时间,提高了系统吞吐量。
1.1 核心注解
对于缓存声明,Spring的缓存抽象提供了一组Java注解:
@Cacheable
: 触发缓存储存@CacheEvict
: 触发缓存回收@CachePut
: 更新缓存,而不会影响方法的执行@Caching
: 将多个缓存操作组合起来应用于一个方法@CacheConfig
: 在类级共享一些常见的缓存相关设置
1.2 基本使用
开启缓存功能
public class SpringbootCacheApplication {}
通过@EnableCaching开启缓存功能,也就是上面的注解才能生效。
在需要缓存的方法上添加相应注解
@Cacheable(cacheNames = "persons")
public Person save(Person person) {}
指定了缓存的名称(对应到redis,相当于加了个命名空间)。而缓存到redis中默认key为persons::Person#toString()。
更新缓存
@CachePut(cacheNames = "persons", key="#person.id")
public Person update(Person person)
清除缓存
"persons", key = "#id") (cacheNames =
public void deleteById(Long id)
指定多个注解
当你需要指定相同类型的多个注解(例如@CacheEvict
或@CachePut
)。例如,因为条件或键表达式在不同的缓存之间是不同的。 @Caching
允许在同一方法上使用多个嵌套的@Cacheable
、@CachePut
和@CacheEvict
。以下示例使用两个@CacheEvict
注解:
(evict = {
"primary", key="#p0"), (cacheNames =
"secondary", key="#id") (cacheNames=
})
public void delete(String name, String id)
以上是缓存注解的基本使用,接下来将介绍其它高级开发技巧。
2. 高级应用
2.1 自定义注解
通过模板机制可以非常方便的定义通用的注解来消除重复的代码,如下示例:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Cacheable(cacheNames="persons", key="#person.id")
public @interface PackCache {
}
使用
public Person save(Person person)
简化了添加注解的代码,Spring会自动解析识别到我们自定义注解上添加的相关@Cache*注解。
2.2 切换缓存实现
当前我的环境引入了redis,所以会自动的创建RedisCacheManager对象。你可以在容器中配置其它的CacheManager,然后通过@Cache*对应的cacheManager属性指定你要使用的cacheManager beanName。