首页
学习
活动
专区
工具
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.2K50
  • 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

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

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

    1.8K71

    Spring Cache && Caffeine 高性能缓存库

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

    36210

    Caffeine缓存

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

    18510

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

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

    2.1K51

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

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

    3.9K10

    聊聊 Redis+Caffeine 两级缓存

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

    1.7K31

    缓存 - Caffeine 不完全指北

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

    1.5K20

    多级缓存(浏览器+nginx+redis+jvm)解决并发下的难题

    请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈当Redis缓存失效时,会对数据库产生冲击所以在这种情况下,我们要增加多级别缓存,防止应用服务的冲击。多级缓存是哪些级别的缓存?...Expires 过期时间response.setDateHeader("Expires", System.currentTimeMillis() + 3600 * 1000); // 缓存一小时配置...目前来说,在java中使用进程缓存,一般都是使用 HashMap 、Guava 、Caffeine .我们这里主要介绍Caffeine CaffeineCaffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库...("key不存在"); return "val";});获取缓存,当缓存不存在时,执行function方法:正常应该是去数据库获取数据并写入缓存put(key,val)caffeineCache.put...在默认情况下,当一个缓存元素过期的时候,caffeine不会自动立即将其清理和驱逐。而是在一次读或写操作后,或者在空闲时间完成对失效数据的驱逐。

    29932

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

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

    2.9K52

    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表达式的内容。

    86420

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

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

    2K10

    干掉 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

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

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

    2.1K30

    它才是Java本地缓存之王

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

    1.5K30

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

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

    26910
    领券