首页
学习
活动
专区
工具
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可能会同时加载该组其余部分。

3.9K30

贼厉害,手撸 SpringBoot 缓存系统,性能杠杠

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

87320

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作为分布式缓存,构造多级缓存体系,保证性能可靠性。

1.1K11

高性能本地缓存组件 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.2K20

Google Guava Cache 使用

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

1.2K30

聊聊本地缓存神器:Caffeine

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

1K161

你应该知道缓存进化史!

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

1K11

干掉 GuavaCache:Caffeine 才是本地缓存

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

1.9K40

GuavaCache 简单入门

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

1.7K20

Java本地缓存

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

34721

谷歌Guava LoadingCache介绍

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

9310

你应该知道缓存进化史

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

52160

本地缓存高性能之王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 缓存名称或插入动态

54730

本地缓存无冕之王Caffeine Cache

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

1.5K20

论获取缓存正确姿势

论获取缓存正确姿势 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

本地缓存性能之王Caffeine

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

1.2K20
领券