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

Caffeine缓存,只在put成功时执行过期元素的逐出

Caffeine缓存是一种基于内存的缓存库,用于提高应用程序的性能和响应速度。它通过将数据存储在内存中,以便快速访问,避免了频繁的磁盘或数据库访问。

Caffeine缓存的特点和优势包括:

  1. 高性能:Caffeine使用了一些高效的数据结构和算法,以实现快速的缓存访问和更新操作。
  2. 内存管理:Caffeine提供了灵活的内存管理机制,可以根据应用程序的需求进行配置,以控制缓存的大小和内存使用。
  3. 过期策略:Caffeine支持多种过期策略,包括基于时间的过期和基于大小的过期。在put成功时,Caffeine会执行过期元素的逐出操作,以确保缓存中的数据始终是最新的。
  4. 强大的功能:Caffeine提供了丰富的功能,如异步加载、缓存统计、缓存预热等,可以满足各种复杂的缓存需求。
  5. 易于集成:Caffeine提供了简单易用的API和文档,可以方便地集成到各种Java应用程序中。

Caffeine缓存适用于许多场景,包括但不限于:

  1. 高并发读取:当应用程序需要频繁读取数据时,使用Caffeine缓存可以显著提高读取性能,减少对底层数据源的访问次数。
  2. 数据库查询结果缓存:将数据库查询结果缓存到Caffeine中,可以避免重复查询,提高响应速度。
  3. 计算结果缓存:当应用程序需要进行复杂的计算时,可以将计算结果缓存到Caffeine中,以便下次直接使用,减少计算时间。
  4. 频繁访问的外部API缓存:当应用程序需要频繁访问外部API时,可以将API返回的数据缓存到Caffeine中,减少对外部API的请求次数。

腾讯云提供了一款与Caffeine缓存类似的产品,即Tencent Cloud CVM(云服务器)。Tencent Cloud CVM是一种高性能、可扩展的云服务器,可以提供快速的计算和存储能力,适用于各种云计算场景。您可以通过以下链接了解更多关于Tencent Cloud CVM的信息:Tencent Cloud CVM产品介绍

请注意,本回答中没有提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的云计算品牌商,以符合问题要求。

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

相关·内容

高性能缓存Caffeine介绍及实践

概览 本文我们将介绍Caffeine-一个Java高性能缓存库。缓存和Map之间一个根本区别是缓存会将储存元素逐出。...逐出策略决定了什么时间应该删除哪些对象,逐出策略直接影响缓存命中率,这是缓存关键特征。Caffeine使用Window TinyLfu逐出策略,该策略提供了接近最佳命中率。...逐出元素 Caffeine具有三种元素逐出策略:基于容量,基于时间和基于引用。 基于容量逐出 这种逐出发生在超过配置缓存容量大小限制。...这是因为缓存逐出是异步执行,并且此方法有助于等待逐出操作完成。...前者当请求过期元素执行将阻塞,直到build()计算出新值为止。 但是后者将返回旧值并异步计算出新值并插入缓存中,此时被刷新元素过期时间将重新开始计时计算。

2.1K51

缓存框架Caffeine探究

.build(); 需要注意是,实际实现上为了性能考虑,这个限制并不会很死板: 缓存元素个数快要达到最大限制时候,过期策略就开始执行了,所以达到最大容量前也许某些不太可能再次访问 Entry...通过调度,会批量执行过期事件,以短时间内最大程度减少执行次数。调度会尽力删除过期条目,但不能对何时删除做任何保证。...* 这允许GC过程中,当key没有被任何强引用指向时候去将缓存元素回收。 * 由于GC依赖于引用相等性。...这允许GC过程中,当value没有被任何强引用指向时候去将缓存元素回收。由于GC依赖于引用相等性。...* 这允许GC过程中,当value没有被任何强引用指向时候去将缓存元素回收。 * 由于GC依赖于引用相等性。

2.1K50
  • Caffeine Cache 进程缓存之王

    Caffeine是使用Java8对Guava缓存重写版本,Spring Boot 2.0中将取代,基于LRU算法实现,支持多种缓存过期策略。...1 maximumSize(100) 最大长度为100 expireAfterWrite(1, TimeUnit.DAYS) 设置缓存策略1天未写入过期缓存(后面讲缓存策略) 过期策略 Caffeine...我们可以通过cache.getIfPresent(key) 方法来获取一个key值,通过cache.put(key, value)方法显示将数控放入缓存,但是这样子会覆盖缓原来key数据。...(RemovalListener) 为缓存指定一个删除侦听器,以便在删除数据执行某些操作。...Cache.stats() 方法返回提供统计信息CacheStats,如: hitRate():返回命中与请求比率 hitCount(): 返回命中缓存总数 evictionCount():缓存逐出数量

    1.5K20

    Caffeine Cache 进程缓存之王

    Caffeine是使用Java8对Guava缓存重写版本,Spring Boot 2.0中将取代,基于LRU算法实现,支持多种缓存过期策略。...1 maximumSize(100) 最大长度为100 expireAfterWrite(1, TimeUnit.DAYS) 设置缓存策略1天未写入过期缓存(后面讲缓存策略) 过期策略 Caffeine...我们可以通过cache.getIfPresent(key) 方法来获取一个key值,通过cache.put(key, value)方法显示将数控放入缓存,但是这样子会覆盖缓原来key数据。...(RemovalListener) 为缓存指定一个删除侦听器,以便在删除数据执行某些操作。...Cache.stats() 方法返回提供统计信息CacheStats,如: hitRate():返回命中与请求比率 hitCount(): 返回命中缓存总数 evictionCount():缓存逐出数量

    4K30

    Spring Cache && Caffeine 高性能缓存

    内存友好:Caffeine支持自动驱逐缓存元素,以限制其内存占用。它还提供了灵活构造器,可以创建具有不同特性缓存,如自动加载元素、基于容量驱逐、基于过期时间驱逐等。...要在 Spring 中使用 Caffeine 作为缓存实现,需执行以下步骤:添加依赖在你项目中,添加 Caffeine 和 Spring Cache 依赖。...* 1000); // 清理缓存 cache.cleanUp(); }}需要注意,"Notification on Eviction" 缓存项被主动回收触发,而不是缓存项被读取或写入时触发...例如,缓存关闭或应用程序退出,可能无法清理缓存。因此,使用 "Cleanup" ,需要考虑到这些因素。...创建 Caffeine 缓存,使用 recordStats 方法启用统计信息收集功能。启用统计信息收集功能后,使用 stats 方法获取缓存统计信息。

    31410

    缓存 | 从本地缓存到分布式缓存, Guava, Caffeine, Memcached, Redis

    ,且无法回收,那下面讲一下常见淘汰策略 FIFO(first in first out) 先进先出策略,最先进入缓存数据缓存空间不够情况下(超出最大元素限制)会被优先被清除掉,以腾出新空间接受新数据...其他 为缓存元素设置过期时间,清理超过过时时间元素 随机清理 优先清理大对象 缓存简单分类 本地缓存:指的是应用中缓存组件,其最大优点是应用和cache是同一个进程内部,请求缓存非常快速,没有过多网络开销等...Guava Cache 是 Guava 中一个本地缓存实现,基于LRU算法实现,并提供了多种缓存过期策略,过期时间、容量等....简化了缓存使用,方便我们更加大胆使用缓存 Caffeine Caffeine是一个基于 Java8 开发提供了近乎最佳命中率高性能缓存库。...本地缓存方面,SpringFramework5.0(SpringBoot2.0)放弃了GoogleGuavaCache,选择了「Caffeine」(Drop Guava caching - superseded

    1.8K71

    Caffeine缓存

    最根本区别是ConcurrentMap将会持有所有加入到缓存当中元素,直到它们被从缓存当中手动移除。但是,Caffeine缓存Cache 通常会被配置成自动驱逐缓存元素,以限制其内存占用。...Caffeine提供了灵活构造器去创建一个拥有下列特性缓存: 自动加载元素缓存当中,异步加载方式也可供选择 当达到最大容量时候可以使用基于就近度和频率算法进行基于容量驱逐 将根据缓存元素上一次访问或者被修改时间进行基于过期时间驱逐...当向缓存中一个已经过时元素进行访问时候将会进行异步刷新 key将自动被弱引用所封装 value将自动被弱引用或者软引用所封装 驱逐(或移除)缓存元素将会进行通知 写入传播到一个外部数据源当中...刷新策略:使用 refreshAfterWrite 设置缓存自动刷新,实现数据实时性和一致性。 监听器支持:可以注册监听器,缓存数据被创建、更新或删除执行特定操作。...通过合理配置和使用,可以显著提升应用程序响应速度和稳定性。 建议: 引入 Caffeine ,根据具体业务需求调整缓存策略,定期监控和分析缓存性能指标,确保缓存系统始终高效运行。

    17110

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

    比如看下面这段从源码中摘抄描述,就清晰写着“如果有同步执行插入或者移除操作,实际元素数量可能会出现差异”。...数据过期时间创建缓存对象时候进行指定,Caffeine创建缓存对象时候提供了3种设定过期策略方法。...比较适用于热点数据存储场景,可以保证较高缓存命中率。同样地,数据过期也不会被立即从内存中移除,而是基于惰性删除机制进行处理。...图片 基于大小 除了前面提到基于访问时间或者创建时间来执行数据过期淘汰方式之外,Caffeine还支持针对缓存总体容量大小进行限制,如果容量满时候,基于W-TinyLFU算法,淘汰最不常被使用数据...weakKeys 默认情况下,我们创建出一个Caffeine缓存对象并写入key-value映射数据,key和value都是以强引用方式存储

    1.9K51

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

    Caffeine 实际上就是 Guava Cache 基础上,利用了一些 Java 8 新特性,提高了某些场景下性能效率。....build(); 需要注意是,实际实现上为了性能考虑,这个限制并不会很死板: 缓存元素个数快要达到最大限制时候,过期策略就开始执行了,所以达到最大容量前也许某些不太可能再次访问 Entry...有时候因为过期 Entry 任务还没执行完,更多 Entry 被放入缓存,导致缓存 Entry 个数短暂超过了这个限制 配置了 maximumSize 就不能配置下面的 maximumWeight...当垃圾收集器工作,无论当前内存是否足够,都会回收掉被弱引用关联对象。...到这里我们基本把创建说完了,接下来看一下使用这些缓存: Cache syncCache = Caffeine.newBuilder().build(); //加入缓存 syncCache.put(key

    3.8K10

    聊聊 Redis+Caffeine 两级缓存

    高性能服务架构设计中,缓存是一个不可或缺环节。实际项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存访问没有命中再查询数据库。...在上面的例子中,设置Caffeine过期时间为60秒,而Redis过期时间为120秒,下面进行测试,首先看第一次接口调用时,进行了数据库查询: 而在之后60秒内访问接口,都没有打印打任何sql...可以看到更新数据后,同步刷新了缓存内容,再之后访问接口不查询数据库,也可以拿到正确结果: 最后再来看一下删除操作,删除数据同时,手动移除Reids和Caffeine缓存: public...先来看一下常用几个注解说明: @Cacheable:根据键从缓存中取值,如果缓存存在,那么获取缓存成功之后,直接返回这个缓存结果。如果缓存不存在,那么执行方法,并将结果放入缓存中。...当下次执行查询操作,会直接返回空对象给调用方,而不会执行方法中查询数据库或Redis操作。

    1.5K31

    缓存 - Caffeine 不完全指北

    它提供了一个强大且易于使用缓存库,可以应用程序中使用,以提高数据访问速度和效率。 下面是一些Caffeine缓存框架主要特点: 高性能:Caffeine设计目标之一是提供卓越性能。...它通过使用高效数据结构和优化算法来实现快速缓存访问。与其他一些常见缓存框架相比,Caffeine缓存访问速度和响应时间上表现出色。...* 获取缓存,如果想要在缓存值不存在,原子地将值写入缓存,则可以调用get(key, k -> value)方法,该方法将避免写入竞争。...其和普通缓存不同地方在于,当缓存不存在/缓存过期,若调用get()方法,则会自动调用CacheLoader.load()方法加载最新值。...* * 基于容量驱逐需要指定缓存容量最大值,当缓存容量达到最大Caffeine将使用LRU策略对缓存进行淘汰;基于时间驱逐策略如字面意思,可以设置最后访问/写入一个缓存经过指定时间后

    1.3K20

    深入剖析来自未来缓存-Caffeine

    2.2读写性能 guava cache中我们说过其读写操作中夹杂着过期时间处理,也就是你一次Put操作中有可能还会做淘汰操作,所以其读写性能会受到一定影响,可以看上面的图中,caffeine的确在读写操作上面完爆...3.2 转瞬即逝-过期策略 Caffeine中分为两种缓存,一个是有界缓存,一个是无界缓存,无界缓存不需要过期并且没有界限。...Caffeine中有个scheduleDrainBuffers方法,用来进行我们过期任务调度,我们读写之后都会对其进行调用: ? 首先他会进行加锁,如果锁失败说明有人已经执行调度了。...我们插入数据时候,根据我们重写方法计算出他应该过期时间,比如他应该在1536046571142过期,上一次处理过期时间是1536046571100,对其相减则得到42ms,然后将其放入时间轮...StatsCounter接口中,定义了需要打点方法目前来说有如下几个: recordHits:记录缓存命中 recordMisses:记录缓存未命中 recordLoadSuccess:记录加载成功

    2.8K52

    干掉 GuavaCache:Caffeine 才是本地缓存

    过期机制 本地缓存过期机制是非常重要,因为本地缓存数据并不像业务数据那样需要保证不丢失。本地缓存数据一般都会要求保证命中率前提下,尽可能占用更少内存,并可在极端情况下,可以被GC掉。...Caffeine过期机制都是构造Cache时候申明,主要有如下几种: expireAfterWrite:表示自从最后一次写入后多久就会过期; expireAfterAccess:表示自从最后一次访问...(写入或者读取)后多久就会过期; expireAfter:自定义过期策略; 刷新机制 构造Cache通过refreshAfterWrite方法指定刷新周期,例如refreshAfterWrite(10...我们时间T访问并获取到值v1,T+5秒时候,数据库中这个值已经更新为v2。但是T+12秒,即已经过了10秒我们通过Caffeine从本地缓存中获取到「还是v1」,并不是v2。...剔除机制 构造Cache可以通过removalListener方法申明剔除监听器,从而可以跟踪本地缓存中被剔除数据历史信息。

    2K40

    高性能本地缓存组件 Caffeine Cache

    Spring5 (spring boot 2.x) 后,Spring 官方放弃了 Guava Cache 作为缓存机制,而是使用性能更优秀 Caffeine 作为默认缓存组件,这对于Caffeine...弱引用 softValues 打开 value 软引用 recordStats 缓存使用统计 expireAfterWrite 和 expireAfterAccess 同时存在,以 expireAfterWrite...如果缓存中不存在该键,则调用这个 Function 函数,并将返回值作为该缓存值插入缓存中。get 方法是以阻塞方式执行,即使多个线程同时请求该值也只会调用一次Function方法。...2、基于时间(Time-based) Caffeine提供了三种定时驱逐策略: expireAfterAccess(long, TimeUnit):最后一次访问或者写入后开始计时,指定时间后过期。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit):最后一次写入缓存后开始计时,指定时间后过期

    1.3K20

    Caffeine 咖啡因,JDK本地缓存

    认识Caffeine 本地缓存 官网:https://github.com/ben-manes/caffeine/wiki/Home-zh-CN Caffeine是一个基于Java8开发提供了近乎最佳命中率高性能缓存库...可以理解成一个高性能Map结构,Caffeine提供了三种缓存驱逐策略 基于容量:创建Caffeine对象设置缓存数量上香 基于时间:创建Caffeine对象设置缓存有效期 基于引用:设置缓存为软引用或弱引用...性能较差 注意:Caffeine设置元素过期,不是立马删除,是等下一次读写操作时或系统空闲时完成对数据清理!...API通过先查缓存缓存没有才查询DB 配置类 import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine...("name"); // 如果没有name则返回null // 新用法,如果缓存没有,就会执行Lambda表达式内容。

    84820

    浅谈本地缓存几种方案选型

    这些问题,基本上是互联网公司面试必问一些问题,如果面试时候,连缓存都不清楚,那确实多少显有些尴尬! 项目里面为什么要引入缓存?这个问题还得结合项目中业务来回答!...实际业务中,本地缓存和分布式缓存会同时结合进行使用,当收到访问某个数据操作,会优先从本地缓存服务(也叫一级缓存)查询,如果没有,再从分布式缓存服务(也叫二级缓存)里面获取,如果也没有,最后再从数据库里面获取...二、方案介绍 如果使用过缓存同学,可以很容易想到缓存需要哪些东西,通常我们使用缓存时候,比较关注两个地方,第一是内存持久化,第二是支持缓存数据自动过期清楚。...2.3、基于 Caffeine 实现本地缓存 Caffeine 是基于 java8 实现新一代缓存工具,缓存性能接近理论最优,可以看作是 Guava Cache 增强版,功能上两者类似,不同Caffeine...从功能性角度看:Guava Cache 和 Caffeine 功能类似,都是支持堆内缓存,Encache 相比功能更为丰富,不仅支持堆内缓存,还支持磁盘写入、集群实现。

    20610

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

    前面刚说到Guava Cache,他优点是封装了get,put操作;提供线程安全缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存数据超过最大值,使用LRU算法替换。...LFU局限性 : LFU 中只要数据访问模式概率分布随时间保持不变,其命中率就能变得非常高。...W-TinyLFU主要用来解决一些稀疏突发访问元素一些数目很少但突发访问量很大场景下,TinyLFU将无法保存这类元素,因为它们无法在给定时间内积累到足够高频率。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 最后一次写入缓存后开始计时,指定时间后过期。...在内存不足 对象缓存 内存不足终止 弱引用WeakReference 垃圾回收 对象缓存 gc运行后终止 虚引用PhantomReference 从来不会 可以用虚引用来跟踪对象被垃圾回收器回收活动

    1.1K30

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

    前面刚说到Guava Cache,他优点是封装了get,put操作;提供线程安全缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存数据超过最大值,使用LRU算法替换。...W-TinyLFU主要用来解决一些稀疏突发访问元素一些数目很少但突发访问量很大场景下,TinyLFU将无法保存这类元素,因为它们无法在给定时间内积累到足够高频率。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 最后一次写入缓存后开始计时,指定时间后过期。...在内存不足 对象缓存 内存不足终止 弱引用 Weak Reference 垃圾回收 对象缓存 gc运行后终止 虚引用 Phantom Reference 从来不会 可以用虚引用来跟踪对象被垃圾回收器回收活动...String unless() default ""; /** * 用于同步缓存失效(过期不存在等各种原因)时候,如果多个线程同时访问被标注方法 * 则只允许一个线程通过去执行方法

    1.9K10

    它才是Java本地缓存之王

    提到本地缓存,大家都能想到Guava Cache,他优点是封装了get,put操作;提供线程安全缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存数据超过最大值,使用LRU算法替换。...「LFU局限性」: LFU 中只要数据访问模式概率分布随时间保持不变,其命中率就能变得非常高。...W-TinyLFU主要用来解决一些稀疏突发访问元素一些数目很少但突发访问量很大场景下,TinyLFU将无法保存这类元素,因为它们无法在给定时间内积累到足够高频率。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 最后一次写入缓存后开始计时,指定时间后过期。...String unless() default ""; /** * 用于同步缓存失效(过期不存在等各种原因)时候,如果多个线程同时访问被标注方法 * 则只允许一个线程通过去执行方法

    1.4K30

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

    Hash冲突查询效率以及并发场景下处理性能。...,可以指定此缓存对象一些处理策略,比如容量限制、比如过期策略等等。...作为以替换Guava Cache为己任后继者,Caffeine缓存容器对象创建相关构建API也沿用了与Guava Cache相同定义,常见方法及其含义梳理如下: 方法 含义说明 initialCapacity...基于个性化定制逻辑来实现过期处理(可以定制基于新增、读取、更新等场景过期策略,甚至支持为不同记录指定不同过期时间) weighter 入参为一个函数式接口,用于指定每条存入缓存数据权重占比情况。...map格式结果,没有命中缓存部分会执行回源操作获取 getIfPresent 不执行回源操作,直接从缓存中尝试获取key对应缓存值 getAllPresent 不执行回源操作,直接从缓存中尝试获取给定

    2K30
    领券