简介
Spring缓存注解可以搭配本地缓存和第三方缓存中间件联合使用,Spring缓存自带缓存使用的是ConcurrentHashMap维护的Cache对象。
Spring常用缓存注解
@EnableCaching 开启缓存
@Cacheable 创建缓存,用于定义在方法上面,不存在返回数据并创建缓存,存在则返回缓存的数据。
@CachePut 更新缓存
@CacheEvict 删除缓存
SpringBoot 使用
Service类
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
// 应该写在启动类
@EnableCaching
public class UserService {
@Data
@AllArgsConstructor
public static class User {
private String name;
private Integer age;
}
// 模拟数据库
List<User> user = new ArrayList<>();
@CachePut(value = "user", key = "#name")
public void add (String name, Integer age) {
user.add(new User(name, age));
}
@CacheEvict(value = "user", key = "#name")
public void delete (String name) {
// 删除逻辑
}
@CachePut(value = "user", key = "#name")
public void update (String name, Integer age) {
// 修改逻辑
}
@Cacheable("user")
public List<User> query(){
System.out.println("查询数据库");
return user;
}
}
测试类
@SpringBootTest
public class Test {
@Autowired
private UserService userService;
@org.junit.jupiter.api.Test
public void test(){
// 插入数据
userService.add("terry", 18);
// 插入数据
userService.add("terry2", 28);
// 第一次查询查数据库
System.out.println(userService.query());
// 第二次查询查缓存
System.out.println(userService.query());
}
}
打印日志:
查询数据库
[UserService.User(name=terry, age=18), UserService.User(name=terry2, age=28)]
[UserService.User(name=terry, age=18), UserService.User(name=terry2, age=28)]