缓存(caffeine)

1.maven

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.8.6</version>
</dependency>

2. API

  • Caffeine     缓存类构造器
方法描述
newBuilder()静态方法,创建实体,可通过链式调用的方式设置属性
from(CaffeineSpec spec)
from(String spec)
静态方法,通过spec设置属性,spec的格式及配置
initialCapacity(int initialCapacity)设置初始容量
maximumSize(long maximumSize)设置缓存最大容量
expireAfterWrite(Duration duration)
expireAfterWrite(long duration, TimeUnit unit)
设置写入后的过期时间
expireAfterAccess(Duration duration)
expireAfterAccess(long duration, TimeUnit unit)
设置访问后的过期时间
expireAfter(Expiry<K1, V1> expiry)自定义过期处理策略
refreshAfterWrite(Duration duration)
refreshAfterWrite(long duration, TimeUnit unit)
maximumWeight(long maximumWeight)设置最大权重
weakKeys()设置弱引用键
weakValues()设置弱引用值
softValues()设置软引用值
executor(Executor executor)设置执行者
scheduler(Scheduler scheduler)设置调度器
weigher(Weigher<K1, V1> weigher)设置权重处理
ticker(Ticker ticker)设置指定时间源
removalListener(RemovalListener<K1, V1> removalListener)移除监听器
writer(CacheWriter<K1, V1> writer)设置缓存写入器,可用于写入外部存储
recordStats()
recordStats(Supplier<StatsCounter> statsCounterSupplier)
设置记录统计
build()构建缓存对象Cache
build(CacheLoader<K1, V1> loader)构建加载缓存对象LoadingCache
buildAsync()构建异步缓存对象AsyncCache
buildAsync(CacheLoader<K1, V1> loader)
buildAsync(AsyncCacheLoader<K1, V1> loader)
构建异步加载缓存AsyncLoadingCache
  • Cache     手动加载缓存
方法描述
getIfPresent(Object key)如果存在获取值,不存在返回null
get(K var1,Function<K,V> var2)
getAllPresent(Iterable<?> var1)获取所有存在的值
put(K var1, V var2)添加缓存数据
putAll( Map<K, V> var1)添加多对缓存数据
invalidate(Object var1)移除缓存
invalidateAll(Iterable<?> var1)
invalidateAll()
移除多个或所有缓存
estimatedSize()缓存过的最多数据数量
stats()获取统计对象.构造对象时需配置recordStats
asMap()获取缓存数据map
cleanUp()清空缓存
policy()获取政策对象Policy,可以在运行时修改缓存配置
  • LoadingCache Cache子接口,同步加载缓存
方法描述
get( K var1)
getAll(Iterable var1)
refresh(K var1)
  • AsyncCache     异步手动加载缓存
方法描述
getIfPresent(Object var1)如果存在则获取未完成数据对象CompletableFuture
get(K var1,Function<K,V> var2)
get(K var1,BiFunction<K, Executor, CompletableFuture> var2)
获取未完成数据对象CompletableFuture
put(K var1, CompletableFuture var2)设置未完成数据对象CompletableFuture
asMap()获取缓存map
synchronous()获取同步缓存接口
  • AsyncLoadingCache     AsyncCache子接口,异步加载缓存
方法描述
get( K var1)获取未完成数据对象CompletableFuture
getAll(Iterable var1)获取多个未完成数据对象CompletableFuture
  • CacheStats       缓存统计状态对象
方法描述
empty()获取一个空的统计对象
requestCount()请求数量,获取缓存数据次数,requestCount=hitCount+missCount
hitCount()命中数量,获取出缓存数据的次数
hitRate()命中率,hitRate=hitCount/requestCount
missCount()遗失数量,没获取出缓存数据的次数
missRate()遗失率,missRate=missCount/requestCount
loadCount()
loadSuccessCount()
loadFailureCount()
totalLoadTime()
averageLoadPenalty()加载新值所花费的平均时间
evictionCount()被驱逐的数据数量
evictionWeight()被驱逐的数据权重

2. 相关配置信息

  1. 缓存填充策略
    (1) 手动加载
    每次get的时候指定一个同步的函数,如果key不存在就调用这个函数生成一个值
    (2) 同步加载
    构造Cache时候,build方法传入一个CacheLoader实现类。实现load方法,通过key加载value。
    (3) 异步加载
    使用Executor去调用方法并返回一个CompletableFuture。异步加载缓存使用了响应式编程模型。
    (4) 异步手动加载
    基于Executor计算条目,并返回一个CompletableFuture
  2. 回收策略
    (1) 基于大小的过期方式
    a. 缓存大小,通过 maximumSize 设置
    b. 权重,通过 maximumWeight 设置
    注: maximumWeight与maximumSize不可以同时使用
    (2) 基于时间的过期方式
    a. 在最后一次访问或者写入后开始计时,在指定的时间后过期 , 通过 expireAfterAccess 设置
    b. 在最后一次写入缓存后开始计时,在指定的时间后过期, 通过 expireAfterWrite 设置
    c. 自定义策略,过期时间由Expiry实现独自计算, 通过 expireAfter 设置
    (3) 基于引用的过期方式
    a. 当key和value都没有引用时驱逐缓存 , 通过 weakKeys与weakValues 设置
    b. 当垃圾收集器需要释放内存时驱逐 , 通过 softValues 设置
    注:AsyncLoadingCache不支持弱引用和软引用。weakValues()和softValues()不可以一起使用

3. spec的格式及配置

  • spec格式
    键值用等号(=)连接,多属性配置用逗号(,)连接,例如:initialCapacity=1,expireAfterWrite=2s,weakKeys,weakValues
  • spec配置属性
属性描述
initialCapacity初始容量,默认未为-1
maximumSize最大容量,默认未为-1
maximumWeight最大权重,默认未为-1
expireAfterWrite写入后过期时间,值为带dDhHmMsS单位的数字,例如: 1d
expireAfterAccess访问后过期时间,值为带dDhHmMsS单位的数字,例如: 1d
refreshAfterWrite写入后刷新时间,值为带dDhHmMsS单位的数字,例如: 1d
weakKeys设置弱引用键
softValues设置软引用值
weakValues设置弱引用值
recordStats设置计数统计

4. 示例

 @Test
    void contextLoads() throws InterruptedException {
        Cache<String, String> build = Caffeine
                .newBuilder()
                .initialCapacity(1)//初始缓存长度为1
                .maximumSize(100)//最大长度为100
                .expireAfterWrite(10, TimeUnit.SECONDS)//设置缓存策略在1天未写入过期缓存
                .build();
        build.put("key","value");
        while (true){
            System.out.println(build.getIfPresent("key"));
            Thread.sleep(1000);
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot是一种快速构建应用程序的框架,而缓存是提高应用程序性能的关键所在。Caffeine是一种高性能内存缓存库,它可以被集成到Spring Boot应用程序中,从而显著提升应用程序性能。 使用Caffeine缓存需要进行以下三个步骤: 第一步是添加Caffeine依赖,可以通过在pom.xml文件中添加依赖项来实现。依赖项如下: ``` <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.9.0</version> </dependency> ``` 第二步是配置缓存管理器,可以通过添加注解来告诉Spring Boot应用程序使用Caffeine作为缓存管理器,例如: ``` @SpringBootApplication @EnableCaching public class MyApplication { @Bean public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(); cacheManager.setCaffeine(Caffeine.newBuilder().maximumSize(100)); return cacheManager; } //其他代码 } ``` 第三步是使用Caffeine缓存,可以通过添加注解来实现。例如,使用@Cacheable注解来缓存函数的结果,如下所示: ``` @Service public class MyService { @Cacheable(value = "myCache", key = "#param") public String getResult(String param) { return "Your parameter is: " + param; } } ``` 本文简述了如何在Spring Boot应用程序中使用Caffeine缓存,以提高应用程序性能。使用Caffeine缓存需要添加依赖项、配置缓存管理器和使用注解来实现。Caffeine缓存可以存储一定数量的键值对,并且能够自动过期、支持异步加载和高性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑重其事,鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值