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

在Guava (Spring)中,如何在缓存中刷新过期的键和值

在Guava (Spring)中,可以通过以下步骤来刷新缓存中过期的键和值:

  1. 首先,确保你已经引入了Guava库的依赖。
  2. 创建一个缓存对象,可以使用CacheBuilder类来构建。例如:
代码语言:java
复制
Cache<String, Object> cache = CacheBuilder.newBuilder()
        .expireAfterWrite(10, TimeUnit.MINUTES) // 设置缓存过期时间为10分钟
        .build();
  1. 向缓存中添加键值对。例如:
代码语言:java
复制
cache.put("key1", "value1");
  1. 当需要刷新缓存中的过期键值对时,可以使用CacheLoader类的reload方法。例如:
代码语言:java
复制
cache.refresh("key1");
  1. 如果你希望在刷新过期键值对时执行一些特定的操作,可以使用CacheLoader类的reload方法的重载版本,传入一个自定义的CacheLoader对象。例如:
代码语言:java
复制
CacheLoader<String, Object> cacheLoader = new CacheLoader<String, Object>() {
    @Override
    public Object load(String key) throws Exception {
        // 在刷新过期键值对时执行的操作
        return "new value";
    }
};

cache.refresh("key1", cacheLoader);

在上述代码中,当缓存中的键"key1"过期时,会调用cacheLoader的load方法来获取新的值,并将其存入缓存中。

需要注意的是,Guava的缓存是基于内存的,如果你需要持久化存储数据,可以考虑使用Guava Cache和数据库结合的方式。

推荐的腾讯云相关产品:腾讯云数据库TencentDB、腾讯云云服务器CVM、腾讯云对象存储COS等。你可以通过访问腾讯云官网获取更详细的产品介绍和文档链接。

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

相关·内容

Caffeine Cache 进程缓存之王

在多线程高并发场景中往往是离不开cache的,需要根据不同的应用场景来需要选择不同的cache,比如分布式缓存如redis、memcached,还有本地(进程内)缓存如ehcache、GuavaCache...Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代,基于LRU算法实现,支持多种缓存过期策略。...在实际业务中这里可以把我们代码中的mapper传入进去,进行数据源的刷新。 但是实际使用中,你设置了一天刷新,但是一天后你发现缓存并没有刷新。...如果缓存中不存在该键,则调用这个 Function 函数,并将返回值作为该缓存的值插入缓存中。get 方法是以阻塞方式执行调用,即使多个线程同时请求该值也只会调用一次Function方法。...注意:您可以编写一个CacheLoader.loadAll来实现为特别请求的key加载值。例如,如果计算某个组中的任何键的值将为该组中的所有键提供值,则loadAll可能会同时加载该组的其余部分。

1.5K20

Caffeine Cache 进程缓存之王

在多线程高并发场景中往往是离不开cache的,需要根据不同的应用场景来需要选择不同的cache,比如分布式缓存如redis、memcached,还有本地(进程内)缓存如ehcache、GuavaCache...Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代,基于LRU算法实现,支持多种缓存过期策略。...在实际业务中这里可以把我们代码中的mapper传入进去,进行数据源的刷新。 但是实际使用中,你设置了一天刷新,但是一天后你发现缓存并没有刷新。...如果缓存中不存在该键,则调用这个 Function 函数,并将返回值作为该缓存的值插入缓存中。get 方法是以阻塞方式执行调用,即使多个线程同时请求该值也只会调用一次Function方法。...注意:您可以编写一个CacheLoader.loadAll来实现为特别请求的key加载值。例如,如果计算某个组中的任何键的值将为该组中的所有键提供值,则loadAll可能会同时加载该组的其余部分。

4K30
  • 贼厉害,手撸的 SpringBoot 缓存系统,性能杠杠的!

    在实际开发中,我用的最多的是集合、缓存和常用类型帮助类,很多人都对这个类库称赞有加。...  直接向缓存中插入值,这会直接覆盖掉给定键之前映射的值      *      * @param key 缓存键 不可为空      * @param obj 缓存值 不可为空      **/     ...  直接向缓存中插入值,这会直接覆盖掉给定键之前映射的值      *      * @param key        缓存键 不可为空      * @param obj        缓存值 不可为空...  直接向缓存中插入值,这会直接覆盖掉给定键之前映射的值      *      * @param key 缓存键 不可为空      * @param obj 缓存值 不可为空      **/     ...  直接向缓存中插入值,这会直接覆盖掉给定键之前映射的值      *      * @param key        缓存键 不可为空      * @param obj        缓存值 不可为空

    88220

    Java本地缓存技术选型(Guava Cache、Caffeine、EhCache)

    本地缓存常用技术本地缓存和应用同属于一个进程,使用不当会影响服务稳定性,所以通常需要考虑更多的因素,例如容量限制、过期策略、淘汰策略、自动刷新等。...loadingCache.put(key, "v");​ // 获取value的值,如果key不存在,调用collable方法获取value值加载到key中再返回...并且在 Spring5 (Springboot 2.x) 后,Spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。...EhCache是Hibernate中默认的CacheProvider,Spring Boot也对其进行了支持,Spring中提供的缓存抽象也支持对EhCache缓存框架的绑定,而且支持基于注解的方式来使用...真实的业务工程中,建议使用Caffeine作为本地缓存,另外使用Redis或者memcache作为分布式缓存,构造多级缓存体系,保证性能和可靠性。

    2.2K12

    高性能本地缓存组件 Caffeine Cache

    参考 Google Guava 的API对缓存框架重写,基于LRU算法实现,支持多种缓存过期策略。 Spring Boot 1.x版本中的默认本地缓存是Guava Cache。...在 Spring5 (spring boot 2.x) 后,Spring 官方放弃了 Guava Cache 作为缓存机制,而是使用性能更优秀的 Caffeine 作为默认缓存组件,这对于Caffeine...最后一次写入后,经过固定时间过期 refreshAfterWrite 写入后,经过固定时间过期,下次访问返回旧值并触发刷新 weakKeys 打开 key 的弱引用 weakValues 打开 value...如果缓存中不存在该键,则调用这个 Function 函数,并将返回值作为该缓存的值插入缓存中。get 方法是以阻塞方式执行,即使多个线程同时请求该值也只会调用一次Function方法。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit):在最后一次写入缓存后开始计时,在指定的时间后过期。

    1.3K20

    Google Guava Cache 使用

    你预料到某些键会被查询一次以上。 缓存中存放的数据总量不会超出内存容量。(Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。...这个方法返回缓存中相应的值,或者用给定的Callable运算并把结果加入到缓存中。在整个加载方法完成前,缓存项相关的可观察状态都不会更改。...在权重限定场景中,除了要注意回收也是在重量逼近限定值时就进行了,还要知道重量是在缓存创建时计算的,因此要考虑重量计算的复杂度。...基于引用的回收(Reference-based Eviction) 通过使用弱引用的键、或弱引用的值、或软引用的值,Guava Cache可以把缓存设置为允许垃圾回收 通过使用弱引用的键、或弱引用的值、...因此,如果你在缓存上同时声明expireAfterWrite和refreshAfterWrite,缓存并不会因为刷新盲目地定时重置,如果缓存项没有被检索,那刷新就不会真的发生,缓存项在过期时间后也变得可以回收

    1.3K30

    聊聊本地缓存神器:Caffeine

    并且在 spring5 (springboot 2.x) 后,spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。...Caffeine是在Guava Cache的基础上做一层封装,性能有明显提高,二者同属于内存级本地缓存。...Caffeine提供灵活的结构来创建缓存,并且有以下特性:自动加载条目到缓存中,可选异步方式可以基于大小剔除可以设置过期时间,时间可以从上次访问或上次写入开始计算异步刷新keys自动包装在弱引用中values...,经过固定时间过期refreshAfterWrite 写入后,经过固定时间过期,下次访问返回旧值并触发刷新weakKeys 打开 key 的弱引用weakValues 打开 value 的弱引用softValues...而Caffiene在取代值和先前值的引用完全一样时不会触发监听器。

    1.7K161

    你应该知道的缓存进化史!

    不支持过期时间 不支持自动刷新 所以谷歌的大佬们对于这些问题,按捺不住了,发明了Guava cache,在Guava cache中你可以如下面的代码一样,轻松使用: ?...5.3、自动刷新 自动刷新操作,在guava cache中实现相对比较简单,直接通过查询,判断其是否满足刷新条件,进行刷新。...5.4、其他特性 在Guava cache中还有一些其他特性: 虚引用 在Guava cache中,key和value都能进行虚引用的设定,在Segment中的有两个引用队列: ?...顺便一提的是,越来越多的开源框架都放弃了Guava cache,比如Spring5。在业务上我也自己曾经比较过Guava cache和caffeine最终选择了caffeine,在线上也有不错的效果。...当然要使用好缓存光是这些仅仅不够,比如本地缓存如何在其他地方更改了之后同步更新,分布式缓存,多级缓存等等。

    1K11

    干掉 GuavaCache:Caffeine 才是本地缓存的王

    话说,中间件的选择上,Spring(SpringBoot)一直是业界的风向标。比如Spring一直使用「Jackson」,而没有使用Gson和fastjson。...过期机制 本地缓存的过期机制是非常重要的,因为本地缓存中的数据并不像业务数据那样需要保证不丢失。本地缓存的数据一般都会要求保证命中率的前提下,尽可能的占用更少的内存,并可在极端情况下,可以被GC掉。...举个例子,假如我们申明了10秒刷新一次。我们在时间T访问并获取到值v1,在T+5秒的时候,数据库中这个值已经更新为v2。...这就意味着,如果不读取本地缓存中的数据的话,无论刷新时间间隔是多少,本地缓存中的数据永远是旧的数据!...而Caffiene在取代值和先前值的引用完全一样时不会触发监听器。

    2K40

    GuavaCache 简单入门

    此方法返回与缓存中的键关联的值,或者从指定的Callable计算它并将其添加到缓存中。...,这将会覆盖指定键在缓存中之前的值。...在刷新的过程中,旧的值仍然会被返回,在逐出值时,会强制检索等待,直到重新加载该值。 在刷新时如果抛出了异常,那么保存旧值,记录并吞下异常。...因此,可以在同一缓存上指定refreshAfterWrite和expireAfterWrite,以便条目上的到期计时器不会再每当条目符合刷新条件时都盲目重置,因此条目如果在符合刷新条件但是没有被查询,可以允许过期...决定的指导原则是缓存的行为就像是所有值都在调用线程中加载一样。这个和原则可以很容易地将缓存引入到以前在每次调用中重新计算其值得代码中,如果旧的代码不可中断,那么新的代码也可能不行。

    1.7K20

    Java本地缓存

    前言 缓存是计算机系统中一种常见的数据存储技术。它用于临时存储经常访问的数据,以提高系统的性能和响应速度。 在计算机系统中,数据通常存储在较慢的主存(RAM)中。...并且在 spring5 (springboot 2.x) 后,spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。...Caffeine提供灵活的结构来创建缓存,并且有以下特性: 自动加载条目到缓存中,可选异步方式 可以基于大小剔除 可以设置过期时间,时间可以从上次访问或上次写入开始计算 异步刷新 keys自动包装在弱引用中...,经过固定时间过期 refreshAfterWrite 写入后,经过固定时间过期,下次访问返回旧值并触发刷新 weakKeys 打开 key 的弱引用 weakValues 打开 value 的弱引用...而Caffiene在取代值和先前值的引用完全一样时不会触发监听器。

    39621

    谷歌Guava LoadingCache介绍

    更高级的有像spring-cache,代码都不需要改,只需要简单加几个注解就可以实现对关键数据的缓存,相当方便(后续我也会出一篇博客介绍下spring-cache)。...这里有些重点参数,下面详细介绍下: 参数 作用 注意事项 maximumSize 缓存的k-v最大数据,当总缓存的数据量达到或者快达到这个值时,就会淘汰它认为不太用的一份数据,近似LRU或者LFU策略...并不一定是达到这个值才开始淘汰旧数据,可能接近时就会开始淘汰 expireAfterAccess 数据被访问后多久就会过期,这个策略主要是为了淘汰长时间不被访问的数据 数据过期不是立即淘汰,而是有数据访问时才会触发...expireAfterWrite 数据写入后多久过期,这个策略是为了防止旧数据被缓存过久 同上 refreshAfterWrite 数据写入后多久刷新一次,这个类似于expireAfterWrite,...CacheLoader   CacheLoader的作用就是为了在Cache中数据缺失时加载数据,其中最重要的方法就是load()方法,你可以在load() 方法中实现对应key加载数据的逻辑。

    11310

    你应该知道的缓存进化史

    不支持过期时间 不支持自动刷新 所以谷歌的大佬们对于这些问题,按捺不住了,发明了Guava cache,在Guava cache中你可以如下面的代码一样,轻松使用: public static void...很有意思的事情是,在guava cache中对于过期的Entry并没有马上过期(也就是并没有后台线程一直在扫),而是通过进行读写操作的时候进行过期处理,这样做的好处是避免后台线程扫描的时候进行全局加锁。...5.3自动刷新 自动刷新操作,在guava cache中实现相对比较简单,直接通过查询,判断其是否满足刷新条件,进行刷新。...5.4其他特性 在Guava cache中还有一些其他特性: 虚引用 在Guava cache中,key和value都能进行虚引用的设定,在Segment中的有两个引用队列: final @Nullable...,越来越多的开源框架都放弃了Guava cache,比如Spring5。

    53060

    本地缓存高性能之王Caffeine

    缓存又分进程内缓存和分布式缓存两种:分布式缓存如redis、memcached等,还有本地(进程内)缓存如ehcache、GuavaCache、Caffeine等。静态资源还可以用CDN来加速哦。...说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。...,在指定的时间后过期。   ...java金融 java金融 null expireAfterAccess 在最后一次读或者写入后开始计时,在指定的时间后过期。假如一直有请求访问该key,那么这个缓存将一直不会过期。...这里和expireAfterAccess、expireAfterAccess不同的是,需要你告诉缓存框架,他应该在具体的某个时间过期,获取具体的过期时间。

    2.3K1619

    本地缓存无冕之王Caffeine Cache

    它的设计目标是优化计算速度、内存效率和实用性,以符合现代软件开发者的需求。Spring Boot 1.x版本中的默认本地缓存是Guava Cache。...在 Spring5 (SpringBoot 2.x)后,Spring 官方放弃了 Guava Cache 作为缓存机制,而是使用性能更优秀的 Caffeine 作为默认缓存组件,这对于Caffeine来说是一个很大的肯定...expireAfterWrite:设置在特定时间段后写入(或修改)缓存项后,会使其过期。此方法定义了写入缓存项后的特定时间段,之后该缓存项将被异步刷新。...当调用被注解的方法时,如果对应的键已经存在缓存,则不再执行方法体,而从缓存中直接返回。当方法返回null时,将不进行缓存操作。@CachePut:表示执行该方法后,其值将作为最新结果更新到缓存中。...Spring Cache还支持 Spring Expression Language (SpEL) 表达式。你可以通过 SpEL 在缓存名称或键中插入动态值。

    65230

    本地缓存无冕之王Caffeine Cache

    Spring Boot 1.x版本中的默认本地缓存是Guava Cache。...在 Spring5 (SpringBoot 2.x)后,Spring 官方放弃了 Guava Cache 作为缓存机制,而是使用性能更优秀的 Caffeine 作为默认缓存组件,这对于Caffeine来说是一个很大的肯定...总的来说,W-TinyLFU 是一个复杂性高、灵活性强的缓存算法,对于识别和处理长期和突发的热数据表现良好,但相比于更简单的算法如 LRU,它需要更多的资源和精细的配置。...当调用被注解的方法时,如果对应的键已经存在缓存,则不再执行方法体,而从缓存中直接返回。当方法返回null时,将不进行缓存操作。 @CachePut:表示执行该方法后,其值将作为最新结果更新到缓存中。...你可以通过 SpEL 在缓存名称或键中插入动态值。

    2K31

    论获取缓存值的正确姿势

    论获取缓存值的正确姿势 cache 时至今日,大家对缓存想必不在陌生。我们身边各种系统中或多或少的都存在缓存,自从有个缓存,我们可以减少很多计算压力,提高应用程序的QPS。...你将某些需要大量计算或查询的结果,设置过期时间后放入缓存。下次需要使用的时候,先去缓存处查询是否存在缓存,没有就直接计算/查询,并将结果塞入缓存中。...此时,有个200并发的请求访问我们系统中某一路径,这些请求对应的都是同一个缓存KEY,但是这个键已经过期了。此时,则会瞬间产生200个线程访问下游资源,下游资源便有可能瞬间就奔溃了~~~ ?...---- guava 和 guava cache guava是一个google发布的一个开源java工具库,其中guava cacha提供了一个轻量级的本地缓存实现机制,通过guava cache,我们可以轻松实现本地缓存...此时,guava cache通过刷新策略,直接返回旧的缓存值,并生成一个线程去处理loading,处理完成后更新缓存值和过期时间。guava 称之为异步模式。

    1.8K80

    Guava Cache 使用小结

    本文将会介绍 Guava Cache 的一些常用操作:基础 API 使用,过期策略,刷新策略。并且按照我的写作习惯,会附带上实际开发中的一些总结。...(可以类比 ConcurrentHashMap) 提供常用的缓存过期策略,缓存刷新策略 提供缓存命中率的监控 基础使用 使用一个示例介绍 Guava Cache 的基础使用方法 -- 缓存大小写转换的返回值...Guava Cache 提供了expireAfterAccess、 expireAfterWrite 的方案,为 LoadingCache 中的缓存值设置过期时间。...缓存刷新 缓存刷新的常用于使用数据源的新值覆盖缓存旧值,Guava Cache 提供了两类刷新机制:手动刷新和定时刷新。...如果需要设置清理策略,可以参考缓存过期小结中的介绍固定数量和固定时间两个方案,结合使用确保使用缓存获得高性能的同时,不把内存打挂。

    1.1K30

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

    前面刚说到Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。...因此W-TinyLFU就是结合LFU和LRU,前者用来应对大多数场景,而LRU用来处理突发流量。 在处理频率记录的方案中,你可能会想到用hashMap去存储,每一个key对应一个频率值。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 在最后一次写入缓存后开始计时,在指定的时间后过期。...注意:CacheWriter不能与弱键或AsyncLoadingCache一起使用。 5. 统计 与Guava Cache的统计一样。...在2.x( Spring Boot 2.0(spring 5) )版本中已经用Caffine Cache取代了Guava Cache。毕竟有了更优的缓存淘汰策略。

    1.2K30
    领券