Guava Cache被淘汰?快来掌握最快本地缓存!
Caffeine 是一款高性能的Java缓存库,专注于提供快速、高效的本地缓存解决方案。本文将深入探讨Caffeine的一些关键特性、用法和性能优化。基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。
缓存和ConcurrentMap有点相似,但有区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素,直到它们被从缓存当中手动移除。但是,Caffeine的缓存Cache
通常会被配置成自动驱逐缓存中元素,以限制其内存占用。在某些场景下,LoadingCache
和AsyncLoadingCache
因为其自动加载缓存的能力将会变得非常实用。
Caffeine提供了灵活的构造器去创建一个拥有下列特性的缓存:
- 自动加载元素到缓存当中,异步加载的方式也可供选择
- 当达到最大容量的时候可以使用基于就近度和频率的算法进行基于容量的驱逐
- 将根据缓存中的元素上一次访问或者被修改的时间进行基于过期时间的驱逐
- 当向缓存中一个已经过时的元素进行访问的时候将会进行异步刷新
- key将自动被弱引用所封装
- value将自动被弱引用或者软引用所封装
- 驱逐(或移除)缓存中的元素时将会进行通知
- 写入传播到一个外部数据源当中
- 持续计算缓存的访问统计指标
为了提高集成度,扩展模块提供了JSR-107 JCache和Guava适配器。JSR-107规范了基于Java 6的API,在牺牲了功能和性能的代价下使代码更加规范。Guava的Cache是Caffeine的原型库并且Caffeine提供了适配器以供简单的迁移策略。
1. 介绍
Caffeine是由Ben Manes创建的一款开源缓存库,它具有以下特性:
- 高性能: Caffeine采用了多种性能优化策略,包括高效的数据结构和无锁算法,以实现卓越的性能表现。
- 内存友好: Caffeine使用近似最近最少使用(LRU)算法,以确保缓存中的数据是最常用的数据,从而最大程度地减少内存占用。
- 异步加载: Caffeine支持异步加载数据,可以有效地处理缓存未命中的情况,提高系统的响应速度。
2. 如何使用Caffeine
2.1 Maven 依赖
引入pom依赖:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>3.1.6</version> <!-- 使用最新版本 --> </dependency>
或者直接观察当前 SpringBoot 自带版本:
2.2 基本用法
import com.github.benmanes.caffeine.cache.Caffeine; public class CaffeineExample { public static void main(String[] args) { // 创建一个缓存实例 Caffeine<String, String> caffeineCache = Caffeine.newBuilder().build(); // 向缓存中放入数据 caffeineCache.put("公众号", "JavaEdge"); // 从缓存中获取数据 String value = caffeineCache.getIfPresent("公众号"); System.out.println("Value for 公众号: " + value); } }
3 高级用法
3.1 自定义缓存策略
通过expireAfterWrite
、expireAfterAccess
等方法自定义缓存项的过期策略。
Caffeine<String, String> caffeineCache = Caffeine.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) .build();
3.2 异步加载
Caffeine<String, CompletableFuture<String>> caffeineCache = Caffeine.newBuilder() .buildAsync(key -> CompletableFuture.supplyAsync(() -> loadDataFromDatabase(key)));
4 性能调优
根据实际需求进行配置,例如缓存的最大大小、刷新策略。
Caffeine<String, String> caffeineCache = Caffeine.newBuilder() .maximumSize(1000) .recordStats() // 启用统计信息 .build();
5 结语
通过本文深入了解了Caffeine缓存库的基本用法、高级用法和性能调优选项。Caffeine是一个功能强大且易于使用的缓存库,适用于各种Java应用程序,特别是对性能要求较高的系统。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM应用开发
目前主攻降低软件复杂性设计、构建高可用系统方向。
参考:
#晒一晒我的offer#