这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战
昨天介绍了Redis集群,但是Spring也是有自己的缓存抽象的,其原理是基于AOP的,如果我们平时缓存的话也可以参考噢。
那什么时候用JVM缓存,什么时候用分布式缓存呢?其实还是由实际的业务决定的,如果一个数据,读一次,写一次,那没必要做缓存,因为缓存失效的太快了,但是你像秒杀的商品啊,那就都是读,改的情况非常小,而且不同实例获取的商品得是一样的,就是说得保证数据的一致性,这种时候用分布式缓存就比较有作用了。
但如果你的数据是那种基本不怎么改,而且呢又不要求很强的数据一致性的话,那可以考虑使用JVM缓存,比如缓存用户数据了,啥的,用来查询都是可以的。
缓存注解
- EnableCaching开启缓存管理。检查方法上是否存在缓存注解,并对其进行相应处理。
- Cacheable使用缓存,如果缓存里面有数据,就去里面拿,没有就执行方法,放入缓存
- CacheEvict缓存清除,标记在类上就是当类中方法执行了,就清除缓存,一般删除和修改中使用,也可可指定key删除缓存。
- CachePut不管方法曾经是否缓存,都执行该方法,并存入缓存
- Caching 可以指定一个或多个缓存的注解,相当于是对缓存进行打包,可以做多个操作
- CacheConfig进行一些缓存的配置
搞代码
我们可以写点代码验证一下,开启缓存管理:
@EnableCaching(proxyTargetClass = true)
public class SpringBucksApplication implements ApplicationRunner {
统一指定缓存key
@CacheConfig(cacheNames = "key")
查询放数据
@Cacheable
public List<Coffee> findAllCoffee() {
return coffeeRepository.findAll();
}
重新加载删除缓存
@CacheEvict
public void reloadCoffee() {
}
运行结果
结果如下:
查询
取缓存
缓存删除
再查就走数据库了。