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

如果我使用cacheBuilder,如何为具体的缓存定制expireAfterWrite?

如果您使用cacheBuilder来创建缓存,并且希望为具体的缓存定制expireAfterWrite,您可以使用CacheBuilder的expireAfterWrite方法来实现。

expireAfterWrite方法用于设置写入后缓存项在固定时间段后过期。您可以使用expireAfterWrite方法指定一个时间段,以便在该时间段后缓存项自动过期。例如,如果您希望缓存项在写入后的10分钟内过期,您可以使用expireAfterWrite方法将过期时间设置为10分钟。

以下是一个使用cacheBuilder为具体缓存定制expireAfterWrite的示例:

代码语言:txt
复制
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.concurrent.TimeUnit;

public class ExampleCache {
    private LoadingCache<String, String> cache;

    public ExampleCache() {
        cache = CacheBuilder.newBuilder()
                .expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存项在写入后的10分钟内过期
                .build(new CacheLoader<String, String>() {
                    @Override
                    public String load(String key) throws Exception {
                        // 缓存未命中时的加载逻辑
                        return loadDataFromSource(key);
                    }
                });
    }

    public String get(String key) {
        return cache.getUnchecked(key);
    }

    private String loadDataFromSource(String key) {
        // 从数据源加载数据的逻辑
        return "Data for key " + key;
    }
}

在上面的示例中,我们创建了一个ExampleCache类,其中使用了cacheBuilder来创建缓存。在构建cacheBuilder时,我们使用expireAfterWrite方法设置了缓存项的过期时间为10分钟。

这样,当您调用ExampleCache的get方法获取缓存值时,如果缓存项已经过期,将会自动从数据源重新加载数据,并更新缓存项的过期时间。

关于腾讯云的相关产品,腾讯云提供了云缓存Redis产品,可以帮助您实现高速、低延迟的缓存服务。您可以在腾讯云的官方网站上了解更多关于云缓存Redis的信息:云缓存Redis

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

相关·内容

Java Cache之 Guava Cache简单应用.

四: 使用实例 前面说了这么多, 都不如如何使用实在. 现在直接贴出来使用实例, 具体实现逻辑大家可以看下源码, 这里也会有一些实际讲解....缓存回收: 1, 基于容量回收(size-based eviction) 如果要规定缓存数目不超过固定值,只需使用CacheBuilder.maximumSize(long)。...另外,不同缓存项有不同“权重”(weights)——例如,如果缓存值,占据完全不同内存空间,你可以使用CacheBuilder.weigher(Weigher)指定一个权重函数,并且用CacheBuilder.maximumWeight...因为垃圾回收仅依赖恒等式(==),使用弱引用值缓存用==而不是equals比较值。 CacheBuilder.softValues():使用软引用存储值。...() 三: 使用实例 这里更新下在项目中常用guava cache实例.

1.5K60
  • Guava Cache用法介绍(极简版)

    缘起 看了官方关于Guava Cache介绍,感觉太过于啰嗦,个人是很不喜欢,看了好大半天也看不懂,直到翻到了一篇国内文章才看懂,特此记录,以备查阅。...如果缓存中不包含key对应记录,Guava会启动一个线程执行Callable对象中call方法,call方法返回值会作为key对应值被存储到缓存中,并且被get方法返回。...Guava可以保证当有多个线程同时访问Cache中一个key时,如果key对应记录不存在,Guava只会启动一个线程执行get方法中Callable参数对应任务加载数据存到缓存。...类expireAfterAccess和expireAfterWrite两个方法为缓存对象指定过期时间,过期对象将会被缓存自动删除。...,相比较于Cache,当从LoadingCache中读取一个指定key记录时,如果该记录不存在,则LoadingCache可以自动执行加载数据到缓存操作。

    4.3K20

    Caffeine Cache 进程缓存之王

    在多线程高并发场景中往往是离不开cache,需要根据不同应用场景来需要选择不同cache,比如分布式缓存redis、memcached,还有本地(进程内)缓存ehcache、GuavaCache...今天,就来介绍一个比Guava Cache性能更高缓存框架:Caffeine。...如何使用 1 public static void main(String[] args) { 2 LoadingCache build = CacheBuilder.newBuilder...这里和前面两个API不同是,需要你告诉缓存框架,他应该在具体某个时间过期,也就是通过前面的重写create,update,以及access方法,获取具体过期时间。 更新策略 何为更新策略?...Cache.stats() 方法返回提供统计信息CacheStats,: hitRate():返回命中与请求比率 hitCount(): 返回命中缓存总数 evictionCount():缓存逐出数量

    4K30

    Caffeine Cache 进程缓存之王

    在多线程高并发场景中往往是离不开cache,需要根据不同应用场景来需要选择不同cache,比如分布式缓存redis、memcached,还有本地(进程内)缓存ehcache、GuavaCache...今天,就来介绍一个比Guava Cache性能更高缓存框架:Caffeine。...如何使用 public static void main(String[] args) { LoadingCache build = CacheBuilder.newBuilder...这里和前面两个API不同是,需要你告诉缓存框架,他应该在具体某个时间过期,也就是通过前面的重写create,update,以及access方法,获取具体过期时间。 更新策略 何为更新策略?...Cache.stats() 方法返回提供统计信息CacheStats,: hitRate():返回命中与请求比率 hitCount(): 返回命中缓存总数 evictionCount():缓存逐出数量

    1.5K20

    GuavaCache 简单入门

    Guava caches是一次性运行本地缓存,并不会把数据存储到文件中或者外部服务器上, 可以使用CacheBuilder构建器模式来获取缓存,但是自定义缓存也很有趣。...Size-based 逐出 如果缓存不应该超出一定大小,请使用CacheBuilder.maximum(long),缓存将尝试驱逐最近或者最不常使用条目,需要注意是,缓存可能会在达到内存限制之前逐出条目...比如,如果缓存值有完全不同内存占用,可以使用CacheBuilder.weigher(Weigher)指定权重函数,使用CacheBuilder.maximumWeight(long)指定最大权重缓存...CacheBuilder.weakKeys()使用弱引用存储键,如果没有其他(强或软引用),则允许对条目进行垃圾回收。...因此,可以在同一缓存上指定refreshAfterWrite和expireAfterWrite,以便条目上到期计时器不会再每当条目符合刷新条件时都盲目重置,因此条目如果在符合刷新条件但是没有被查询,可以允许过期

    1.7K20

    Guava CacheBuilder使用说明 原

    CacheBuilder是Guava用于创建LoadingCache、Cache实例构建类。可以使用下面的方法来创建一个Cache实例。...构建缓存特性     通过CacheBuilder构建Cache实例具有以下特性: 将数据写入缓存时是原子操作。...使用Guava CacheBuilder需要了解细节  通过CacheBuilder创建缓存实例数据结构是一个hash table,其性能和特征都类似于ConcurrentHashMap。...如果设置了expireAfterWrite或expireAfterAccess参数,当每个缓存被修改、访问缓存数据或调用Cache::cleanUp方法时某些数据可能会被清除。...如果缓存空间有限,需要预估足够大初始化空间来缓,避免在数据增长时昂贵扩展操作(扩展空间会导致深度COPY)。

    2.2K50

    日常使用 Cache 组件来看看 Google 大牛们是如何设计

    前言 Google 出 Guava 是 Java 核心增强库,应用非常广泛。 平时用也挺频繁,这次就借助日常使用 Cache 组件来看看 Google 大牛们是如何设计。...JVM 缓存 首先是 JVM 缓存,也可以认为是堆缓存。 其实就是创建一些全局变量, Map、List 之类容器用于存放数据。 这样优势是使用简单但是也有以下问题: 只能显式写入,清除数据。...不能按照一定规则淘汰数据, LRU,LFU,FIFO 等。 清除数据时回调通知。 其他一些定制功能等。...分布式缓存 刚才提到两种缓存其实都是堆内缓存,只能在单个节点中使用,这样在分布式场景下就招架不住了。 于是也有了一些缓存中间件, Redis、Memcached,在分布式环境下可以共享内存。...如果在时间窗口 N 内发生了 X 次异常信息,相应就需要作出反馈(报警、记录日志等)。

    29930

    Java本地内存LoadingCache介绍

    一、本地缓存设计思路 如果让我们去设计一个本地缓存,需要考虑以下问题: 1、数据存储结构如何设计 本地缓存应该是要能高效查找,因此数据存储结构很关键; 最简单设计就是一个大HashMap,这样在多线程写时候会有问题...3、更新问题 实际场景缓存内容是有过期时间,即过一段时间需要更新,具体是通过过期时间方式还是刷新机制 4、并发问题 当缓存快要过期了,如果这个时候多线程来取数据,是有一个线程能更新还是随机?...,V为缓存内容类型,如果想以String为Key,缓存内容也是String,则这样声明: LoadingCache actCache; 来看看LoadingCache...hash冲突拉链法; expireAfterWrite:写入多久之后过期,即被删除 maximumSize:缓存个数,注意这里是缓存多少个key,而不是缓存占用字节; removalListener...:删除监听器,可以在被删除时候做些处理,更新 build:主要方法,参数为CacheLoader,这是一个抽象类,必须实现方法有load,即根据单个key得到缓存内容,还有个loadAll,用于一次取多个

    2.2K30

    Google Guava Cache 使用

    如同范例代码展示一样,Cache实例通过CacheBuilder生成器模式获取,但是自定义你缓存才是最有趣部分 注:如果你不需要Cache中特性,使用ConcurrentHashMap有更好内存效率...基于容量回收(size-based eviction) 如果要规定缓存数目不超过固定值,只需使用CacheBuilder.maximumSize(long)。...另外,不同缓存项有不同“权重”(weights)——例如,如果缓存值,占据完全不同内存空间,你可以使用CacheBuilder.weigher(Weigher)指定一个权重函数,并且用CacheBuilder.maximumWeight...因此,如果你在缓存上同时声明expireAfterWrite和refreshAfterWrite,缓存并不会因为刷新盲目地定时重置,如果缓存项没有被检索,那刷新就不会真的发生,缓存项在过期时间后也变得可以回收...这个原则让使用缓存或每次都计算值可以简单地相互切换。如果老代码(加载值代码)是不可中断,那么新代码(使用缓存加载值代码)多半也应该是不可中断

    1.2K30

    本地缓存组件 Guava cache 详解

    :put数据时,先插入DB,再删除原来缓存;ge数据时,先查缓存,命中则返回,没有命中时,需要查询DB,再把查询结果放入缓存中 。如果访问量大,我们还得兼顾本地缓存线程安全问题。...当然如果你不想指定重建策略,那么你可以使用无参build()方法,它将返回Cache类型构建对象。 CacheBuilder 是Guava 提供一个快速构建缓存对象工具类。...将清除掉那些最近最少使用缓存; 基于权重清除: 使用CacheBuilder.weigher(Weigher)指定一个权重函数,并且用CacheBuilder.maximumWeight(long)...我们来分析一下如果要实现这个功能,那Cache中就必须存在线程来进行周期性地检查、清除等工作,很多cacheredis、ehcache都是这样实现。...使用CacheBuilder构建缓存不会”自动”执行清理和回收工作,也不会在某个缓存项过期后马上清理,也没有诸如此类清理机制。

    2.5K20

    GuavaCache学习笔记三:底层源码阅读

    回到顶部 二、使用方法  2.1 CacheBuilder有3种失效重载模式 1.expireAfterWrite 当 创建 或 写之后 固定 有效期到达时,数据会被自动从缓存中移除,源码注释如下:...//默认使用equals方法(内容相同)判断key/value相等,但如果申明了弱引用key 或者 弱/软引用value,那么必须使用==判断相等(内存地址相同) 36 Note: by default...具体就是上面追踪到了CacheBuilder构造LocalLoadingCache,类图如下: ?...因为垃圾回收仅依赖恒等式(==),使用弱引用键缓存用==而不是equals比较键。 CacheBuilder.weakValues():使用弱引用存储值。...考虑到使用软引用性能影响,我们通常建议使用更有性能预测性缓存大小限定(见上文,基于容量回收)。使用软引用值缓存同样用==而不是equals比较值。

    1K20

    面试官:本地缓存怎么选型?问倒一大片!

    点击关注公众号,Java干货及时送达 最近在使用系统时候,发现尽管应用已经使用了 redis 缓存提高查询效率,但是仍然有进一步优化空间,于是想到了比分布式缓存性能更好本地缓存,因此对领域内常用本地缓存进行了一番调研...public Cache createCache() { return CacheBuilder.newBuilder() .expireAfterWrite...,当缓存数据量达到设定阈值之后,Guava cache 支持使用 FIFO 和 LRU 策略对缓存记录采取淘汰措施。...(3)新型淘汰算法 W-TinyLFU 传统淘汰算法, LRU、LFU、FIFO,在实际缓存场景中都存在一些弊端, FIFO 算法,如果缓存使用频率较高,那么缓存数据会一直处在进进出出状态,...缓存数据刚进入时会停留在窗口缓存中,这个部分只占总缓存 1%,当被挤出窗口缓存时,会在过滤器汇总和主缓存中淘汰数据进行比较,如果频率更高,则进入主缓存,否则就被淘汰,主缓存被分为淘汰段和保护段,两段都是

    19210

    Guava 内存缓存使用

    一、概述 guava⽬前有三种刷新本地缓存机制: expireAfterAccess:当缓存项在指定时间段内没有被读或写就会被回收。...expireAfterWrite:当缓存项在指定时间段内没有更新就会被回收。-- 常用 refreshAfterWrite:当缓存项上一次更新操作之后多久会被刷新。...设置合理 expireAfterWrite 和 refreshAfterWrite 时间来保证缓存不会被瞬间击垮。根据合理场景设置合理参数。...⽐已经间隔⼀天,首次访问希望获取最新值,而不是先获取旧值再去刷新新值,这种就可⽤通过设置expireAfterWrite来保证。...其实如果极端情况下,即新旧值基本不会变更,直接不采⽤ expireAfterWrite,⽽直接采⽤ refreshAfterWrite 来执⾏ load 也是可以,性能会更优。

    2.5K10

    Guava Cache 使用小结

    需要承认是,无论是面试八股文风气,还是实际使用频繁度,Redis 分布式缓存的确是当下最为流行缓存技术,但同时,从个人项目经验来看,本地缓存也是非常常用一个技术点。...值得注意是,这里测试用例使用是除了 get 、getUnchecked 外第三种获取缓存方式,字面意思描述那样,getIfPresent 在缓存不存在时,并不会触发 load 方法加载数据源...该操作可能有它适用场景,例如最大限度使用 JVM 内存做缓存,但依赖 GC 清理,性能可想而知会比较低。总之是不会依赖 JVM 机制来清理缓存,所以这个特性不敢使用,线上还是稳定性第一。...如果需要设置清理策略,可以参考缓存过期小结中介绍固定数量和固定时间两个方案,结合使用确保使用缓存获得高性能同时,不把内存打挂。...在选择使用 Guava 时,一般会结合实际使用场景,做出以下考虑: 为什么不用 Redis? 如果本地缓存能够解决,不希望额外引入一个中间件。 如果保证缓存和数据源数据一致性?

    1.1K30

    设计模式 | 建造者模式及典型应用

    每一个具体建造者都相对独立,而与其他具体建造者无关,因此可以很方便地替换具体建造者或增加新具体建造者,用户使用不同具体建造者即可得到不同产品对象。...建造者模式主要缺点如下: 建造者模式所创建产品一般具有较多共同点,其组成部分相似,如果产品之间差异性很大,例如很多组成部分都不相同,不适合使用建造者模式,因此其使用范围受到一定限制。...如果产品内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统理解难度和运行成本。...,CacheBuilder.newBuilder() 创建了一个具体建造者,.initialCapacity(10)、.concurrencyLevel(5)、.expireAfterWrite(10,...,initialCapacity()、concurrencyLevel()、expireAfterWrite() 等方法对传进来参数进行处理和设置,返回 CacheBuilder 对象本身,build

    81420

    来自未来缓存-Caffeine,带你揭开它神秘面纱

    前言 相信大家都了解缓存,了解redis,之前有发过几篇redis文章忘记小伙伴可以点击链接看看! Redis真的这么快吗? 缓存穿透,雪崩,击穿以及解决方案分析 一....使用流程大致如下: 去一级缓存中查找数据(caffeine-本地应用内) 如果没有的话,去二级缓存中查找数据(redis-内存) 再没有,再去数据库中查找数据(数据库-磁盘) ?...这里和前面两个API不同是,需要你告诉缓存框架,他应该在具体某个时间过期,也就是通过前面的重写create,update,以及access方法,获取具体过期时间。...除旧布新-更新策略 何为更新策略?就是在设定多长时间后会自动刷新缓存。...希望这篇文章可以带你了解Caffeine,了解它和Redis不同,下一篇我会讲解如何去使用Caffeine和Redis形成多级缓存,希望你们是最好观众!

    1.2K10
    领券