Sprint Cache Caffeine 管理 Guava Cache

引入依赖

<dependency>
     <groupId>com.github.ben-manes.caffeine</groupId>
     <artifactId>caffeine</artifactId>
     <version>2.8.0</version>
</dependency>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

使用@EnableCaching注解让Spring Boot开启对缓存的支持
@EnableCaching

配置文件

spring.cache.cache-names=token
spring.cache.caffeine.spec=maximumSize=50,expireAfterWrite=5s
  • 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不可以同时使用
如果使用了refreshAfterWrite配置还必须指定一个CacheLoader,参考如下:

/**
 * 必须要指定这个Bean,refreshAfterWrite=5s这个配置属性才生效
 *
 * @return
 */
@Bean
public CacheLoader<Object, Object> cacheLoader() {
    
    
 
    CacheLoader<Object, Object> cacheLoader = new CacheLoader<Object, Object>() {
    
    
 
        @Override
        public Object load(Object key) throws Exception {
    
    
            return null;
        }
 
        // 重写这个方法将oldValue值返回回去,进而刷新缓存
        @Override
        public Object reload(Object key, Object oldValue) throws Exception {
    
    
            return oldValue;
        }
    };
 
    return cacheLoader;
}

使用

@Component
public class MathService {
    
    
    // key名称
    @Cacheable("piDecimals")
    public int getData(int i) {
    
    
        return computePiDecimal(i);
    }
 
    public int computePiDecimal(int i) {
    
    
        int result = i + 5;
        return result;
    }
}

猜你喜欢

转载自blog.csdn.net/weiwoyonzhe/article/details/102540234