SpringBoot项目使用Caffeine本地缓存
-
添加maven依赖
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.8.0</version>
</dependency>
-
添加配置类
import com.example.demo.bo.tdhBo.VisitBo;
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.Map;
@Configuration
public class CaffeineConfig {
@Bean
public Cache<String , Map<String, VisitBo>> itemCache() {
return Caffeine.newBuilder()
.initialCapacity(500) // 初始的缓存空间大小
.maximumSize(2000) // 缓存的最大条数
.build();
}
}
-
配置说明
| 参数 | 类型 | 描述 |
|---|---|---|
| initialCapacity | integer | 初始的缓存空间大小 |
| maximumSize | long | 缓存的最大条数 |
| maximumWeight | long | 缓存的最大权重 |
| expireAfterWrite | duration | 最后一次写入后经过固定时间过期 (与expireAfterAccess 同时存在时,以 expireAfterWrite 为准) |
| expireAfterAccess | duration | 最后一次访问后经过固定时间过期 (与expireAfterWrite 同时存在时,以 expireAfterWrite 为准) |
| refreshAfterWrite | duration | 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存 |
| weakKeys | boolean | 打开 key 的弱引用 |
| weakValues | boolean | 打开 value 的弱引用(与softValues不能同时使用) |
| softValues | boolean | 打开 value 的软引用 (与weakValues不能同时使用) |
| recordStats | - | 开发统计功能 |
-
软引用、弱引用的区别
软引用: 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。
弱引用: 弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存
设置方式如下:
// 软引用
Caffeine.newBuilder().softValues().build();
// 弱引用
Caffeine.newBuilder().weakKeys().weakValues().build();
-
调用示例
@Autowired
Cache<String, Object> caffeineCache;
// 加入缓存
caffeineCache.put(key,value);
// 先从缓存读取
caffeineCache.getIfPresent(id);
// 从缓存中删除
caffeineCache.asMap().remove(key);