Spring Cache
简介
Spring Framework 提供了一个强大的缓存抽象层,称为 Spring Cache,它可以帮助开发者轻松地集成各种缓存解决方案,如 Ehcache、Caffeine、Guava Cache、Redis 等。Spring Cache 的目标是提供一个统一的API来管理缓存,使得开发者无需关心底层缓存实现的具体细节。
框架优势
这个框架提供了一系列的注解,简化代码。且支持多个非关系型数据库。
Spring Cache 使用详解
1. 添加依赖
首先,您需要在项目的依赖管理文件中添加相应的缓存实现依赖。例如,如果您打算使用 Caffeine 作为缓存提供者,可以添加如下 Maven 依赖:
2.配置缓存管理器
接下来,您需要配置一个 CacheManager
实现类,这个类负责管理缓存区域(caches)。
3.使用注解
Spring Cache 提供了一系列的注解来支持缓存操作:
- @Cacheable:用于方法上,表示该方法的结果将被缓存。当再次调用该方法时,如果缓存中存在结果,则直接返回缓存中的值。
- @CachePut:用于更新缓存。当方法执行完毕后,其结果会被放入缓存中。
- @CacheEvict:用于清除缓存。可以单独使用,也可以与 @Cacheable 或 @CachePut 一起使用来在方法执行后清除指定的缓存项。
- @Caching:允许组合多个缓存操作注解。
4. 缓存键和缓存区域
- 缓存键:默认情况下,方法的所有参数将被用来生成缓存键。可以通过
key
属性指定自定义的缓存键表达式。 - 缓存区域:缓存区域是指定的一组缓存项的集合。可以通过
value
或cacheNames
属性来指定缓存区域的名字。
5. 缓存过期
可以配置缓存项的有效时间。例如,在使用 Caffeine 时,可以通过配置 CaffeineCacheManager
来设置过期时间:
1@Bean
2public CacheManager cacheManager() {
3 CaffeineCacheManager cacheManager = new CaffeineCacheManager();
4 cacheManager.setCaffeine(caffeine -> caffeine.expireAfterWrite(5, TimeUnit.MINUTES));
5 return cacheManager;
6}
6. 多个缓存提供者
Spring Cache 支持同时使用多个缓存提供者。您可以为不同的场景选择不同的缓存技术。
7. 集中式缓存
对于分布式环境,您可以使用 Redis、Hazelcast 等集中式缓存解决方案,它们支持集群和高可用性。
常用注解
@EnableCaching 注解使用
介绍:加到启动类上,用于开启缓存注解功能
@CachePut 注解使用
注解中key参数的写法很灵活,用的是spEL 表达式,
有多种方式可选,优先最直观的第一种即可
@Cacheable 注解使用
细节: 如果查到有缓存,则根本不会执行下面的方法。
如果没有缓存,则会通过反射调用下面的方法,把返回结果,即案例中的user缓存到
redis的缓存中,key的名就是已经通过前面的代码生成好的key
注意:这个注解中,参数key的 spEL表达式参数没有result的写法了,
具体的可以查看源码中的注释
@CacheEvict 注解使用
删除一个拼接后的key,删除的参数列表和上述方法类似。
删除所有缓存,参数列表加一个allEntries参数
总结
Spring Cache 通过提供一个抽象层,简化了缓存的使用,使得开发者可以专注于业务逻辑而不用担心缓存的细节。通过使用适当的注解和配置,您可以很容易地在应用程序中实现缓存机制,从而提高应用程序的性能和响应速度。