1 缓存
1.1 java缓存框架
EhCache
1.2 Spring Cache
定义了规范,主要注解
@EnableCaching
@Cahcable
@CahcePut
@CacheEvict
@Caching
@CahceConfig
1.3 工程搭建
1.4 基本用法
- 单测
1.5 自定义key
- 一般用方法名+参数可以满足大部分的使用场景
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* @Description TODO
* @Author tzb
* @Date 2021/8/24 21:58
* @Version 1.0
**/
@Component
public class MyKeyGen implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
String s = target.toString() + ":" + method.getName() + ":" + Arrays.toString(params);
return s;
}
}
- 单测
@SpringBootTest
class CacheRedisSpringbootApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
User u = userService.getUserById2(1L,"John");
System.out.println(u);
}
}
1.6 更新缓存
@Service
public class UserService {
@Cacheable(cacheNames = "c1")
public User getUserById(Long id) {
System.out.println("getUserById: " + id);
User user = new User();
user.setId(id);
user.setUsername("Mike");
return user;
}
//如果缓存不存在,则进行缓存,否则更新
@CachePut(cacheNames = "c1", key = "#user.id")
public User updateUserById(User user) {
return user;
}
- 单测
@SpringBootTest
class CacheRedisSpringbootApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
User u = userService.getUserById(100L);
System.out.println(u);
User u2 = new User();
u2.setId(100L);
u2.setUsername("Lin");
userService.updateUserById(u2);
User u3 = userService.getUserById(100L);
System.out.println(u3);
}
}
1.7 清除缓存
@Service
public class UserService {
@Cacheable(cacheNames = "c1")
public User getUserById(Long id) {
System.out.println("getUserById: " + id);
User user = new User();
user.setId(id);
user.setUsername("Mike");
return user;
}
@CachePut(cacheNames = "c1", key = "#user.id")
public User updateUserById(User user) {
return user;
}
@CacheEvict(cacheNames = "c1")
public void deleteUserById(Long id){
System.out.println("deleteUserById");
}