这篇文章主要介绍Caffeine和Spring Boot集成的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联专注于邛崃网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供邛崃营销型网站建设,邛崃网站制作、邛崃网页设计、邛崃网站官网定制、小程序设计服务,打造邛崃网络公司原创品牌,更为您提供邛崃网站排名全网营销落地服务。
Caffeine和Spring Boot集成
Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava。如果出现Caffeine,CaffeineCacheManager将会自动配置。使用spring.cache.cache-names属性可以在启动时创建缓存,并可以通过以下配置进行自定义(按顺序):
- spring.cache.caffeine.spec: 定义的特殊缓存 
- com.github.benmanes.caffeine.cache.CaffeineSpec: bean定义 
- com.github.benmanes.caffeine.cache.Caffeine: bean定义 
例如,以下配置创建一个foo和bar缓存,最大数量为500,存活时间为10分钟:
spring.cache.cache-names=foo,bar spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
除此之外,如果定义了com.github.benmanes.caffeine.cache.CacheLoader,它会自动关联到CaffeineCacheManager。由于该CacheLoader将关联被该缓存管理器管理的所有缓存,所以它必须定义为CacheLoader
引入依赖
org.springframework.boot spring-boot-starter-cache com.github.ben-manes.caffeine caffeine 2.6.0 
开启缓存的支持
使用@EnableCaching注解让Spring Boot开启对缓存的支持
@SpringBootApplication
@EnableCaching// 开启缓存,需要显示的指定
public class SpringBootStudentCacheCaffeineApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringBootStudentCacheCaffeineApplication.class, args);
  }
}配置文件
新增对缓存的特殊配置,如最大容量、过期时间等
spring.cache.cache-names=people spring.cache.caffeine.spec=initialCapacity=50,maximumSize=500,expireAfterWrite=10s,refreshAfterWrite=5s
如果使用了refreshAfterWrite配置还必须指定一个CacheLoader,如:
/** * 必须要指定这个Bean,refreshAfterWrite=5s这个配置属性才生效 * * @return */ @Bean public CacheLoader
Caffeine配置说明:
- initialCapacity=[integer]: 初始的缓存空间大小 
- maximumSize=[long]: 缓存的最大条数 
- maximumWeight=[long]: 缓存的最大权重 
- expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期 
- expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期 
- refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存 
- weakKeys: 打开key的弱引用 
- weakValues:打开value的弱引用 
- softValues:打开value的软引用 
- recordStats:开发统计功能 
注意:
- expireAfterWrite和expireAfterAccess同事存在时,以expireAfterWrite为准。 
- maximumSize和maximumWeight不可以同时使用 
- weakValues和softValues不可以同时使用 
示例代码
/**
 * @author yuhao.wang
 */
@Service
public class PersonServiceImpl implements PersonService {
  private static final Logger logger = LoggerFactory.getLogger(PersonServiceImpl.class);
  @Autowired
  PersonRepository personRepository;
  @Override
  @CachePut(value = "people", key = "#person.id")
  public Person save(Person person) {
    Person p = personRepository.save(person);
    logger.info("为id、key为:" + p.getId() + "数据做了缓存");
    return p;
  }
  @Override
  @CacheEvict(value = "people")//2
  public void remove(Long id) {
    logger.info("删除了id、key为" + id + "的数据缓存");
    //这里不做实际删除操作
  }
  /**
   * Cacheable
   * value:缓存key的前缀。
   * key:缓存key的后缀。
   * sync:设置如果缓存过期是不是只放一个请求去请求数据库,其他请求阻塞,默认是false。
   */
  @Override
  @Cacheable(value = "people", key = "#person.id", sync = true)
  public Person findOne(Person person, String a, String[] b, List c) {
    Person p = personRepository.findOne(person.getId());
    logger.info("为id、key为:" + p.getId() + "数据做了缓存");
    return p;
  }
  @Override
  @Cacheable(value = "people1")//3
  public Person findOne1() {
    Person p = personRepository.findOne(2L);
    logger.info("为id、key为:" + p.getId() + "数据做了缓存");
    return p;
  }
  @Override
  @Cacheable(value = "people2")//3
  public Person findOne2(Person person) {
    Person p = personRepository.findOne(person.getId());
    logger.info("为id、key为:" + p.getId() + "数据做了缓存");
    return p;
  }
} 以上是“Caffeine和Spring Boot集成的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
分享文章:Caffeine和SpringBoot集成的示例分析
文章路径:http://www.cqwzjz.cn/article/pgcecp.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 