Spring Cache介绍
Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单的加一个注解,就能实现缓存功能。
Spring Cache底层可以切换不同的cache实现,通过CacheManager接口来统一不同的缓存技术。
不同的缓存技术需要实现不同的CacheManager(CacheManager是接口,每种技术需要提供自己的实现类),默认的CacheManager是基于map实现的,项目重新启动之后,map的数据就会消失:
| CacheManager的实现类 | 对应的缓存技术 |
|---|---|
| EhCacheCacheManager | 使用EhCache作为缓存技术 |
| GuavaCacheManager | 使用Google的GuavaCache作为缓存技术 |
| RedisCacheManager | 使用Redis作为缓存技术 |
Spring Cache的常用注解
| 注解 | 位置 | 说明 |
|---|---|---|
| @EnableCaching | 启动类 | 开启缓存注解功能 |
| @Cacheable | 方法(一般用在查找方法上) | 方法执行前查看缓存中是否有数据,如果有数据,则直接返回缓存数据,如果没有数据,调用方法后将方法的返回值放到缓存中 |
| @CachePut | 方法 | 将方法的返回值放到缓存中 |
| @CacheEvict | 方法(一般用在删除和修改方法上) | 将一条或多条数据从缓存中删除 |
注解的属性
value="缓存的名称"。key="SpEL表示的动态的key",需要重点关注key的设计,比如(具体可以使用哪些SpEL,请看注解的属性上方有哪些):#p0#user.id#result.id#root.args[0]。condition,条件满足时缓存。unless,条件满足时不缓存。allEntries用法:@CacheEvict(value = "setmeal", allEntries = true),表示删除setmeal下的所有key
Spring Cache使用Redis作为缓存技术
在Spring Boot项目中,使用Redis缓存技术需要:
- 导入maven坐标:spring-boot-starter-data-redis、spring-boot-starter-cache
- 配置application.yml
3. 在启动类上使用@EnableCaching注解开启缓存支持。
4. 在Controller方法上加如@Cacheable、@CacheEvict等注解,进行缓存操作,注意类是否实现了Serializable接口。