缓存(Spring,Caffeine)
概述
-
Spring通过@Configuration注解把对应类识别为配置类
-
可以创建CaffeineCacheManager的setCaffeine来配置缓存管理器,如过期时间,缓存最大条数,缓存空间,淘汰策略。
-
将缓存管理器交给Spring管理,@Bean
-
将缓存的组件注入Spring,通过@Component注解。再通过@PostConstruct注解,方法init(),以便于在bean初始化时执行。比如有些数据要在启动时就提前获取到,可以加在这里执行。
-
如果想明确知道该内容被销毁,或者在销毁前需要做什么操作,可以通过@PreDestroy注解,destroy方法。比如在销毁前打个日志
-
缓存的一些行为可以通过@CacheConfig(cacheNames = "缓存管理器名")注解的类里进行操作。比如当我们使用redis作为缓存中间件的话,大量数据的场景通常不会直接去读取redis,增加太大压力。可以通过@Cacheable注解,@Cacheable(value = "缓存名", key = "#key")的方法,被注解标志的方法不会立刻执行代码内容,而是先通过Spring便捷缓存操作先去判断是否存在,如果存在则直接返回。如果不存在或未命中,这时才会执行代码内容,比如在代码里读取redis的内容,获取到的值会返回并被放入缓存中。
-
除了Caffeine还有一些其他缓存
![image]()
目前比较推荐的是 Caffeine,淘汰算法比较先进,并且得到 Spring Cache 的支持(新版的 Spring Cache 不再支持 Guava Cache)
简而言之:
添加依赖:确保你的项目中包含了Spring Boot的缓存起步依赖。
启用缓存:在Spring Boot应用的主类或配置类上添加@EnableCaching注解来启用缓存支持。
配置缓存管理器:根据需要配置合适的缓存管理器。Spring Boot会自动配置一个简单的内存缓存管理器,但你可以根据需要配置其他类型的缓存管理器,如Redis、EhCache等。
使用缓存注解:在需要缓存的方法上使用@Cacheable、@CachePut、@CacheEvict等注解来控制缓存行为。
缓存淘汰策略
- LRU : 最近最少使用。
- 它其实是个链表,被使用的会移动到链表头部,淘汰时就移除链表尾部
- 所以它会淘汰最近最久未使用的内容。更加使用于有时间区间的场景
- LFU : 最少使用频率。
- 它是会给使用计数的,每使用一次就会计数一次。淘汰时就移除计数最少的
- 所以它的淘汰适用于关注使用频次的
- FIFO : 先进先出原则,淘汰最先设置的缓存


浙公网安备 33010602011771号