Caffeine Cache Java缓存组件
缓存组件Caffeine Cache
- 定义介绍
- 整合springboot用法
- 整合spring-boot-starter-cache用法
定义介绍
特性
高性能:基于高效并发设计和 TinyLFU 算法,命中率高。
丰富策略:支持容量限制、过期时间、异步加载、自定义清理策略。
统计监控:内置 recordStats 提供命中率等监控数据。
Spring 集成:支持与 Spring Cache 无缝对接。
优点
性能卓越,易用性强,配置灵活,内置监控,轻量级无额外依赖。
缺点
仅限本地缓存,无分布式支持,需手动管理内存,无持久化能力。
适用场景
单机高并发场景,如配置缓存、字典数据等频繁访问数据的缓存需求。
总结
Caffeine 是性能优异的本地缓存工具,但适用于单机场景,不支持分布式和持久化。
整合springboot用法
启动类加:@EnableCaching
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
1.导入依赖(springboot项目会自动管理版本)
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
2.注入一个bean
@Configuration
public class CacheConfig {
@Bean
public Cache<String, Object> caffeineCache() {
return Caffeine.newBuilder()
// 设置最后一次写入或访问后经过固定时间过期
.expireAfterWrite(60, TimeUnit.SECONDS)
// 初始的缓存空间大小
.initialCapacity(100)
// 缓存的最大条数
.maximumSize(1000)
.build();
}
}
3.使用
@Autowired
private Cache<String, Object> caffeineCache;
public void test1(){
String key = "";
//获取key对应value,没有则获取计算值
Object o = caffeineCache.get(key, (curKey) -> "compute Value");
// 获取所有list中得key对应得值,返回一个map,否则返回计算map
Map<String, Object> all = caffeineCache.getAll(new ArrayList<>(), (curkey) -> new HashMap<>());
//获取值,没有返回null
caffeineCache.getIfPresent(key);
caffeineCache.getAllPresent(new ArrayList<>());
//获取缓存所有值作为一个map
ConcurrentMap<@NonNull String, @NonNull Object> map1 = caffeineCache.asMap();
//删除指定key
caffeineCache.invalidate(key);
//删除所有指定key
caffeineCache.invalidateAll(new ArrayList<>());
//删除所有key
caffeineCache.invalidateAll();
//存值
caffeineCache.put(key, "value");
caffeineCache.putAll(new HashMap<>());
//惰性执行,仅清理过期数据
caffeineCache.cleanUp();
//获取缓存中键值对的近似数量
caffeineCache.estimatedSize();
/**
* 查询缓存中条目的额外信息
* expireAfter(): 获取与过期策略相关的信息。
* eviction(): 获取与驱逐策略相关的信息(如缓存的最大大小)。
* refreshAfterWrite(): 获取与写后刷新相关的信息(如果配置了该策略)。
*/
Policy<String, Object> policy = caffeineCache.policy();
/**
* 统计信息包括缓存命中率、加载成功率、驱逐条目数量
* hitCount(): 缓存命中次数。
* missCount(): 缓存未命中次数。
* loadSuccessCount(): 成功加载新值的次数。
* evictionCount(): 被驱逐的条目数量。
*/
caffeineCache.stats();
}
整合spring-boot-starter-cache用法
启动类加:@EnableCaching
@SpringBootApplication
@EnableCaching
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
1.导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
2.yml配置
spring:
cache:
type: CAFFEINE # 指定使用 Caffeine 作为缓存类型
caffeine:
spec: maximumSize=1000,expireAfterWrite=10m,recordStats # 配置 Caffeine 缓存策略,采用 CacheBuilderSpec 的语法
# maximumSize=1000: 设置缓存的最大容量为 1000 条记录,超出时采用最近最少使用(LRU)策略移除。
# expireAfterWrite=10m: 设置缓存条目在写入后 10 分钟过期。
# recordStats: 启用缓存统计功能,用于监控缓存的命中率、加载时间等数据。
3.用法和redis一样,用什么缓存用户是无感知的
查看:https://blog.csdn.net/m0_56182317/article/details/129871802?spm=1001.2014.3001.5501
即可