Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:
•
EHCache
•
Caffeine
•
Redis
依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency>
常用注解如下:
@EnableCaching | 开启缓存注解功能,通常加在启动类上 |
@Cacheable | 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中 |
@CachePut | 将方法的返回值放到缓存中 |
@CacheEvict | 将一条或多条数据从缓存中删除 |
@Cacheable用法如下:
@Cacheable(cacheNames = "usercache",key = "#id")
@GetMapping
public User getById(Long id){
User user = userMapper.getById(id);
return user;
}
@CachePut用法如下:
@CachePut(cacheNames = "usercache",key = "#user.id")//key的生成为 usercache::id
//@CachePut(cacheNames = "usercache",key = "#result.id")
//下面三个是接受第一个形参的id值,在本例中是user.id
//@CachePut(cacheNames = "usercache",key = "#p0.id")
//@CachePut(cacheNames = "usercache",key = "#a0.id")
//@CachePut(cacheNames = "usercache",key = "#root.args[0].id")
@PostMapping
public User save(@RequestBody User user){
userMapper.insert(user);
return user;
}
@CacheEvict用法如下:
//删除usercache下的单个缓存数据
@CacheEvict(cacheNames = "usercache",key = "#id")
@DeleteMapping
public void deleteById(Long id){
userMapper.deleteById(id);
}
//删除usercache下的所有缓存数据
@CacheEvict(cacheNames = "usercache",allEntries = true)
@DeleteMapping("/delAll")
public void deleteAll(){
userMapper.deleteAll();
}