首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Caffeine -如何仅在创建时间后使缓存值过期

Caffeine是一个Java开发的高性能缓存库,它提供了一种简单且灵活的方式来管理缓存数据。在使用Caffeine时,可以通过设置缓存项的过期时间来控制缓存值的过期。

要在创建时间后使缓存值过期,可以使用Caffeine提供的expireAfterWrite方法。该方法接受一个时间段作为参数,表示从缓存项被创建或最后一次更新的时间开始计算,经过指定的时间后缓存项将过期。

下面是使用Caffeine实现缓存值在创建时间后过期的示例代码:

代码语言:java
复制
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;

public class CacheExample {
    public static void main(String[] args) {
        // 创建一个缓存实例
        Cache<String, String> cache = Caffeine.newBuilder()
                .expireAfterWrite(1, TimeUnit.HOURS) // 设置缓存项的过期时间为1小时
                .build();

        // 向缓存中添加数据
        cache.put("key1", "value1");

        // 从缓存中获取数据
        String value = cache.getIfPresent("key1");
        System.out.println(value); // 输出:value1

        // 等待缓存项过期
        try {
            Thread.sleep(2 * 60 * 60 * 1000); // 等待2小时
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 再次从缓存中获取数据
        value = cache.getIfPresent("key1");
        System.out.println(value); // 输出:null,缓存项已过期
    }
}

在上述示例中,我们使用Caffeine创建了一个缓存实例,并通过expireAfterWrite方法设置了缓存项的过期时间为1小时。然后,我们向缓存中添加了一个键值对,并通过getIfPresent方法从缓存中获取了该值。接着,我们等待了2小时后再次从缓存中获取该值,发现返回的结果为null,说明缓存项已经过期。

Caffeine的优势在于其高性能和灵活的配置选项。它使用了一些高效的数据结构和算法来提供快速的缓存访问速度,并且可以通过各种配置选项来满足不同的需求。

Caffeine的应用场景包括但不限于:

  1. 提高系统性能:通过缓存经常访问的数据,减少对底层数据源的访问次数,从而提高系统的响应速度和吞吐量。
  2. 减轻数据库负载:将数据库查询结果缓存起来,减少对数据库的频繁查询,从而减轻数据库的负载压力。
  3. 限流和熔断:可以使用缓存来限制对某些资源的访问频率,防止系统被恶意请求压垮。
  4. 数据预热:可以在系统启动时将一些常用的数据预先加载到缓存中,提高系统的初始化速度。

腾讯云提供了一些与缓存相关的产品,例如腾讯云的分布式缓存数据库TencentDB for Redis、对象存储服务COS等。您可以通过以下链接了解更多关于这些产品的信息:

请注意,以上链接仅供参考,具体的产品选择应根据您的实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

高性能缓存Caffeine介绍及实践

如果缓存中不存在此键,则此Lambda函数将用于提供返回,并且该返回将在计算插入缓存中: dataObject = cache .get(key, k -> DataObject.get("Data...有时我们需要手动使某些缓存无效: cache.invalidate(key); dataObject = cache.getIfPresent(key); assertNull(dataObject...(10, TimeUnit.SECONDS) .softValues() .build(k -> DataObject.get("Data for " + k)); 刷新缓存 可以将缓存配置为在定义的时间自动刷新元素...前者当请求过期元素时,执行将阻塞,直到build()计算出新为止。 但是后者将返回旧并异步计算出新并插入缓存中,此时被刷新的元素的过期时间将重新开始计时计算。...总结 在本文中,我们熟悉了Java的Caffeine缓存库。我们了解了如何配置和填充缓存,以及如何根据需要选择适当的过期或刷新策略。

2.1K51

Caffeine缓存的简单介绍

如果缓存中不存在该键,则此函数将用于提供兜底,该将在执行写入缓存: dataObject = cache .get(key, k -> DataObject.get("Data for A")...有时我们需要手动使一些缓存失效: cache.invalidate(key); dataObject = cache.getIfPresent(key); assertNull(dataObject...4、缓存的清理 Caffeine有三种缓存的清理策略:基于大小、基于时间和基于引用。 4.1、基于大小的清理 这种类型的清理设计为在超出缓存配置的大小限制时发生清理。...,分为三种: 访问后过期——自上次读取或写入以来,条目在经过某段时间过期 写入后过期——自上次写入以来,条目在经过某段时间过期 自定义策略——由Expiry的实现来为每个条目单独计算到期时间 让我们使用...(10, TimeUnit.SECONDS) .softValues() .build(k -> DataObject.get("Data for " + k)); 5、缓存刷新 可以将缓存配置为在定义的时间自动刷新条目

1.4K10
  • Java本地缓存框架系列-Caffeine-1. 简介与使用

    我们来看一下 Caffeine 的基本使用,首先是创建: 限制缓存大小 Caffeine 有两种方式限制缓存大小。两种配置互斥,不能同时配置 1....创建一个自定义权重限制容量的 Cache Cache> stringListCache = Caffeine.newBuilder() //最大weight,当所有entry的weight和快达到这个限制的时候会发生缓存过期...//设置 Entry 创建过期时间 //这里设置为 60s 后过期 public long expireAfterCreate(@NonNull String key...这个接口主要包括三个: Entry 创建过期时间:参数为 Entry 的 Key 还有 Value,以及 Entry 创建时间。...Entry 读取过期时间:参数为 Entry 的 Key 还有 Value,以及当前时间(并不是系统当前时间,而是 Ticker 里面的当前时间,如果需要获取系统当前时间需要自己手动获取)和当前剩余的过期时间

    3.8K10

    高性能本地缓存组件 Caffeine Cache

    maximumSize 缓存的最大条数 maximumWeight 缓存的最大权重 expireAfterAccess 最后一次写入或访问,经过固定时间过期 expireAfterWrite...最后一次写入,经过固定时间过期 refreshAfterWrite 写入,经过固定时间过期,下次访问返回旧并触发刷新 weakKeys 打开 key 的弱引用 weakValues 打开 value...2、同步加载 这种加载缓存方式使用了与用于初始化的 Function 的手动策略类似的 get 方法。让我们看看如何使用它。...2、基于时间(Time-based) Caffeine提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):在最后一次访问或者写入开始计时,在指定的时间过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit):在最后一次写入缓存开始计时,在指定的时间过期

    1.3K20

    解读JVM级别本地缓存Caffeine青出于蓝的要诀3 —— 讲透Caffeine的数据驱逐淘汰机制与用法

    数据的过期时间创建缓存对象的时候进行指定,Caffeine创建缓存对象的时候提供了3种设定过期策略的方法。...方式 具体说明 expireAfterWrite 基于创建时间进行过期处理 expireAfterAccess 基于最后访问时间进行过期处理 expireAfter 基于个性化定制的逻辑来实现过期处理...按照这种方式来定时过期时间的时候需要注意一点,如果不需要设定某一维度的过期策略的时候,需要将对应实现方法的返回设置为一个非常大的数值,比如可以像上述示例代码中一样,指定为Long.MAX_VALUE...图片 基于大小 除了前面提到的基于访问时间或者创建时间来执行数据过期淘汰的方式之外,Caffeine还支持针对缓存总体容量大小进行限制,如果容量满的时候,基于W-TinyLFU算法,淘汰最不常被使用的数据...图片 weakValues 与weakKeys类似,我们可以在创建缓存对象的时候使用weakValues指定将value以弱引用的方式存储到缓存中。

    1.9K51

    解读JVM级别本地缓存Caffeine青出于蓝的要诀 —— 缘何会更强、如何去上手

    如何选择 在Caffeine与Guava Cache之间如何选择?其实Spring已经给大家做了示范,从Spring5开始,其内置的本地缓存框架由Guava Cache切换到了Caffeine。...容器创建 和之前我们聊过的Guava Cache创建缓存对象的操作相似,我们可以通过构造器来方便的创建出一个Caffeine对象。...待创建缓存容器的初始容量大小(记录条数) maximumSize 指定此缓存容器的最大容量(最大缓存记录条数) maximumWeight 指定此缓存容器的最大容量(最大比重),需结合weighter...方可体现出效果 expireAfterWrite 设定过期策略,按照数据写入时间进行计算 expireAfterAccess 设定过期策略,按照数据最后访问时间来计算 expireAfter...基于个性化定制的逻辑来实现过期处理(可以定制基于新增、读取、更新等场景的过期策略,甚至支持为不同记录指定不同过期时间) weighter 入参为一个函数式接口,用于指定每条存入的缓存数据的权重占比情况。

    2K30

    本地缓存无冕之王Caffeine Cache

    以下是如何创建一个Async Loading Cache的缓存示例:import com.github.benmanes.caffeine.cache.AsyncLoadingCache;import...假如一直有请求访问该key,那么这个缓存将一直不会过期。expireAfterWrite(long, TimeUnit):在最后一次写入缓存开始计时,在指定的时间过期。...集成Caffeine Cache在Caffeine Cache的介绍结束,接下来介绍如何在项目中顺利集成Caffeine Cache。...weigher:定义了如何计算每个缓存条目的权重。expireAfterAccess:设置在特定时间访问缓存,会使其过期。...expireAfterWrite:设置在特定时间写入(或修改)缓存,会使其过期。此方法定义了写入缓存的特定时间段,之后该缓存项将被异步刷新。

    59730

    本地缓存无冕之王Caffeine Cache

    以下是如何创建一个Async Loading Cache的缓存示例: import com.github.benmanes.caffeine.cache.AsyncLoadingCache; import...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit):在最后一次写入缓存开始计时,在指定的时间过期。...SpringBoot集成Caffeine Cache 在Caffeine Cache的介绍结束,接下来介绍如何在项目中顺利集成Caffeine Cache。...expireAfterAccess:设置在特定时间访问缓存,会使其过期。 expireAfterWrite:设置在特定时间写入(或修改)缓存,会使其过期。...此方法定义了写入缓存的特定时间段,之后该缓存项将被异步刷新。 refreshAfterWrite:此方法定义了写入缓存的特定时间段,之后该缓存项将被刷新。

    1.7K31

    Caffeine Cache 进程缓存之王

    1 maximumSize(100) 最大长度为100 expireAfterWrite(1, TimeUnit.DAYS) 设置缓存策略在1天未写入过期缓存(后面讲缓存策略) 过期策略 在Caffeine...这里和前面两个API不同的是,需要你告诉缓存框架,他应该在具体的某个时间过期,也就是通过前面的重写create,update,以及access的方法,获取具体的过期时间。 更新策略 何为更新策略?...就是在设定多长时间后会自动刷新缓存。...手动删除缓存: 在任何时候,您都可能明确地使缓存无效,而不用等待缓存被驱逐。...averageLoadPenalty():加载新所花费的平均时间 总结 Caffeine的调整不只有算法上面的调整,内存方面的优化也有很大进步,Caffeine的API的操作功能和Guava是基本保持一致的

    1.5K20

    它才是Java本地缓存之王

    如前所述,作为现代的缓存,它需要解决两个挑战: 一个是如何避免维护频率信息的高开销; 另一个是如何反应随时间变化的访问模式。...提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):在最后一次访问或者写入开始计时,在指定的时间过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 在最后一次写入缓存开始计时,在指定的时间过期。...expireAfterAccess=[duration]: 最后一次写入或访问经过固定时间过期 expireAfterWrite=[duration]: 最后一次写入经过固定时间过期 refreshAfterWrite...=[duration]: 创建缓存或者最近一次更新缓存经过固定的时间间隔,刷新缓存 weakKeys: 打开key的弱引用 weakValues:打开value的弱引用 softValues:打开value

    1.4K30

    Caffeine Cache 进程缓存之王

    1 maximumSize(100) 最大长度为100 expireAfterWrite(1, TimeUnit.DAYS) 设置缓存策略在1天未写入过期缓存(后面讲缓存策略) 过期策略 在Caffeine...这里和前面两个API不同的是,需要你告诉缓存框架,他应该在具体的某个时间过期,也就是通过前面的重写create,update,以及access的方法,获取具体的过期时间。 更新策略 何为更新策略?...就是在设定多长时间后会自动刷新缓存。...手动删除缓存: 在任何时候,您都可能明确地使缓存无效,而不用等待缓存被驱逐。...averageLoadPenalty():加载新所花费的平均时间 总结 Caffeine的调整不只有算法上面的调整,内存方面的优化也有很大进步,Caffeine的API的操作功能和Guava是基本保持一致的

    4K30

    缓存 - Caffeine 不完全指北

    强大的功能:Caffeine提供了许多强大的功能来满足各种需求。它支持异步加载和刷新缓存项,可以设置过期时间和定时刷新策略,支持缓存项的自动删除和手动失效等。...强大的缓存策略:Caffeine 提供了多种缓存策略,包括基于访问时间、写入时间或自定义规则的过期策略。它还支持最近最少使用(LRU)、最近最不常用(LFU)和固定大小等其他策略。...() //创建缓存或者最近一次更新缓存经过指定时间间隔,刷新缓存;refreshAfterWrite仅支持LoadingCache .refreshAfterWrite...() //创建缓存或者最近一次更新缓存经过指定时间间隔刷新缓存;仅支持LoadingCache .refreshAfterWrite(1...* * 基于容量的驱逐需要指定缓存容量的最大,当缓存容量达到最大时,Caffeine将使用LRU策略对缓存进行淘汰;基于时间的驱逐策略如字面意思,可以设置在最后访问/写入一个缓存经过指定时间

    1.3K20

    学习下真正的缓存之王,以及在Spring Boot中的使用!

    如前所述,作为现代的缓存,它需要解决两个挑战: 一个是如何避免维护频率信息的高开销; 另一个是如何反应随时间变化的访问模式。...提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):在最后一次访问或者写入开始计时,在指定的时间过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。expireAfterWrite(long, TimeUnit): 在最后一次写入缓存开始计时,在指定的时间过期。...expireAfterAccess=[duration]: 最后一次写入或访问经过固定时间过期 expireAfterWrite=[duration]: 最后一次写入经过固定时间过期 refreshAfterWrite...=[duration]: 创建缓存或者最近一次更新缓存经过固定的时间间隔,刷新缓存 weakKeys: 打开key的弱引用 weakValues:打开value的弱引用 softValues:打开

    2.1K10

    真正的缓存之王,Google Guava 只是弟弟

    如前所述,作为现代的缓存,它需要解决两个挑战: 一个是如何避免维护频率信息的高开销; 另一个是如何反应随时间变化的访问模式。...提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):在最后一次访问或者写入开始计时,在指定的时间过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 在最后一次写入缓存开始计时,在指定的时间过期。...=[long]: 缓存的最大权重 expireAfterAccess=[duration]: 最后一次写入或访问经过固定时间过期 expireAfterWrite=...[duration]: 最后一次写入经过固定时间过期 refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存经过固定的时间间隔,刷新缓存

    1.1K30

    Java本地缓存

    Caffeine提供灵活的结构来创建缓存,并且有以下特性: 自动加载条目到缓存中,可选异步方式 可以基于大小剔除 可以设置过期时间时间可以从上次访问或上次写入开始计算 异步刷新 keys自动包装在弱引用中...maximumSize 缓存的最大条数 maximumWeight 缓存的最大权重 expireAfterAccess 最后一次写入或访问,经过固定时间过期 expireAfterWrite 最后一次写入...,经过固定时间过期 refreshAfterWrite 写入,经过固定时间过期,下次访问返回旧并触发刷新 weakKeys 打开 key 的弱引用 weakValues 打开 value 的弱引用...清除策略 Caffeine提供了三种缓存驱逐策略: 基于容量:设置缓存的数量上限 // 创建缓存对象 Cache cache = Caffeine.newBuilder...() .maximumSize(1) // 设置缓存大小上限为 1 .build(); 基于时间:设置缓存的有效时间 // 创建缓存对象 Cache cache

    37021

    Caffeine Cache~高性能 Java 本地缓存之王

    如前所述,作为现代的缓存,它需要解决两个挑战: 一个是如何避免维护频率信息的高开销; 另一个是如何反应随时间变化的访问模式。...提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):在最后一次访问或者写入开始计时,在指定的时间过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。expireAfterWrite(long, TimeUnit): 在最后一次写入缓存开始计时,在指定的时间过期。...expireAfterAccess=[duration]: 最后一次写入或访问经过固定时间过期 expireAfterWrite=[duration]: 最后一次写入经过固定时间过期 refreshAfterWrite...=[duration]: 创建缓存或者最近一次更新缓存经过固定的时间间隔,刷新缓存 weakKeys: 打开key的弱引用 weakValues:打开value的弱引用 softValues:打开

    3.9K31

    聊聊本地缓存神器:Caffeine

    Caffeine提供灵活的结构来创建缓存,并且有以下特性:自动加载条目到缓存中,可选异步方式可以基于大小剔除可以设置过期时间时间可以从上次访问或上次写入开始计算异步刷新keys自动包装在弱引用中values...maximumSize 缓存的最大条数maximumWeight 缓存的最大权重expireAfterAccess 最后一次写入或访问,经过固定时间过期expireAfterWrite 最后一次写入...,经过固定时间过期refreshAfterWrite 写入,经过固定时间过期,下次访问返回旧并触发刷新weakKeys 打开 key 的弱引用weakValues 打开 value 的弱引用softValues...清除策略 Caffeine提供了三种缓存驱逐策略:基于容量:设置缓存的数量上限// 创建缓存对象Cache cache = Caffeine.newBuilder()....maximumSize(1) // 设置缓存大小上限为 1 .build();基于时间:设置缓存的有效时间// 创建缓存对象Cache cache = Caffeine.newBuilder

    1.4K161

    Spring Cache && Caffeine 高性能缓存

    内存友好:Caffeine支持自动驱逐缓存中的元素,以限制其内存占用。它还提供了灵活的构造器,可以创建具有不同特性的缓存,如自动加载元素、基于容量的驱逐、基于过期时间的驱逐等。...当缓存中的数据量超过了设定的最大Caffeine 会自动回收最近最少使用的数据。定时回收:Caffeine 支持定时回收策略,可以设置缓存中的数据在一定时间被强制回收。...缓存管理器:创建了一个 CaffeineCacheManager Bean,并设置了 Caffeine 的一些基本属性,如过期时间和最大缓存大小。...在创建 Caffeine 缓存时,使用 recordStats 方法启用统计信息收集功能。启用统计信息收集功能,使用 stats 方法获取缓存的统计信息。...在缓存中添加了两个缓存,我们等待了一段时间,让缓存过期。然后,我们使用 stats 方法获取了缓存的统计信息,并将其打印出来。

    31410

    高性能Java本地缓存组件Caffeine Cache

    如前所述,作为现代的缓存,它需要解决两个挑战: 一个是如何避免维护频率信息的高开销; 另一个是如何反应随时间变化的访问模式。...提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):在最后一次访问或者写入开始计时,在指定的时间过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 在最后一次写入缓存开始计时,在指定的时间过期。...expireAfterAccess=[duration]: 最后一次写入或访问经过固定时间过期 expireAfterWrite=[duration]: 最后一次写入经过固定时间过期 refreshAfterWrite...=[duration]: 创建缓存或者最近一次更新缓存经过固定的时间间隔,刷新缓存 weakKeys: 打开key的弱引用 weakValues:打开value的弱引用 softValues:打开value

    1.9K10
    领券