缓存(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 : 先进先出原则,淘汰最先设置的缓存
posted @ 2025-02-05 23:17  J九木  阅读(68)  评论(0)    收藏  举报