Spring Boot | Spring Boot项目集成本地缓存之王(Caffeine)

·  阅读 1720
Spring Boot | Spring Boot项目集成本地缓存之王(Caffeine)

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

Caffeine 介绍

官网地址:github.com/ben-manes/c…

Caffeine 是一个高性能的本地缓存库。

示例程序环境配置

本示例程序的依赖环境配置如下:

  • JDK版本:1.8
  • Caffeine 版本:2.9.3
  • SpringBoot 版本:2.7.0

SpringBoot项目中集成Caffeine的步骤

SpringBoot 有如下两种方式集成 Caffeine :

  • 方式一:直接引入 Caffeine 依赖,然后使用 Caffeine 方法实现缓存。
  • 方式二:引入 Caffeine 和 Spring Cache 依赖,使用 SpringCache 注解方法实现缓存。

我们这里只介绍方式一

1、在pom.xml文件中引入caffeine相关依赖。

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>
复制代码

2、编写缓存配置类 —— CacheConfig.java

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
public class CacheConfig {
    @Bean
    public Cache<String, Object> caffeineCache() {
        return Caffeine.newBuilder()
                // 设置最后一次写入或访问后两个小时后过期
                .expireAfterWrite(7200, TimeUnit.SECONDS)
                // 初始的缓存空间大小
                .initialCapacity(100)
                // 缓存的最大条数
                .maximumSize(1000)
                .build();
    }
}
复制代码

在缓存配置类中我们做了如下设置:

  • 设置了最后一次写入或访问后两个小时后过期
  • 设置了初始的缓存空间大小
  • 设置了缓存的最大条数

Caffeine常用的一些配置:

配置值类型描述说明
expireAfterAccessduration最后一次写入或访问后,指定经过多长的时间过期
expireAfterWriteduration最后一次写入后,指定经过多长的时间缓存过期
initialCapacityinteger初始的缓存空间大小
maximumSizelong缓存的最大条数
maximumWeightlong缓存的最大权重
refreshAfterWriteduration创建缓存或者最近一次更新缓存后,经过指定的时间间隔后刷新缓存

注意:

  • maximumSizemaximumWeight不可以同时使用。
  • expireAfterWriteexpireAfterAccess同时存在时,以expireAfterWrite为准。

3、数据存取

// 1. 注入
@Resource
private Cache<String, Object> caffeineCache;

// 2. 存储数据
caffeineCache.put("access_token", token);

// 3. 读取数据
String token = (String) caffeineCache.asMap().get("access_token");
复制代码

数据读取时,我们需要先注入caffeine cache,即我们在第2步的缓存配置类中配置的缓存,存储数据是调用的是缓存类的put(...)方法,读取数据则调用缓存类的get(...)方法。


分类:
后端
收藏成功!
已添加到「」, 点击更改