SpringCache是Spring提供的缓存框架。提供了基于注解的缓存功能。
SpringCache提供了一层抽象,底层可以切换不同的缓存实现(只需要导入不同的Jar包即可),如EHCache,Caffeine,Redis。
2个重要依赖已经导入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
注解使用:
1 在启动类上加@EnableCaching
2.1 @CachePut标签
在controller层的UserController下的save方法上写入如下的代码:
@PostMapping
@CachePut(cacheNames="userCache",key="#user.id") //如果使用spring Cache缓存数据,key的生成:userCache::1。user是从参数取到的。
//@CachePut(cacheNames="userCache",key="#result.id") //result是从返回值return取到的
//@CachePut(cacheNames="userCache",key="#p0.id")
//@CachePut(cacheNames="userCache",key="#a0.id")
//@CachePut(cacheNames="userCache",key="#root.args[0].id")
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
当对数据进行数据入库时自动存入redis缓存
注意key="#result.id"中的result取的是返回值返回的那个结果。 key="#user.id"的user取的是传入的参数。p0,a0,root.args[0]表示取的都是第1个参数。
2.2 @Cacheable(cacheNames="userCache",key="#id")
在方法上加入@Cacheable:方法执行时,会先查询是否有缓存,如果有,直接调用缓存;如果没有,将sql查询出来的数据存入缓存
2.3@CacheEvict(cacheNames = "userCache",key="#id") //key的形式 userCache::10
@CacheEvict(cacheNames="userCache",allEntries = true)
在方法上加入@CacheEvict:将一条或多条数据从缓存中删除