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

Google Guava Cache 使用

例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存。 Guava Cache与ConcurrentMap很相似,但也不完全一样。...进一步说,asMap视图的原子运算在Guava Cache的原子加载范畴之外,所以相比于Cache.asMap().putIfAbsent(K, V),Cache.get(K, Callable) 应该总是优先使用...基于引用的回收(Reference-based Eviction) 通过使用弱引用的键、或弱引用的值、或软引用的值,Guava Cache可以把缓存设置为允许垃圾回收 通过使用弱引用的键、或弱引用的值、...或软引用的值,Guava Cache可以把缓存设置为允许垃圾回收: CacheBuilder.weakKeys():使用弱引用存储键。...如上所述,Guava Cache在某种意义上支持中断。

1.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Guava Cache 使用小结

需要事先说明的是,我没有阅读过 Guava Cache 的源码,对其的介绍仅仅是一些使用经验或者最佳实践,不会有过多深入的解析。...(可以类比 ConcurrentHashMap) 提供常用的缓存过期策略,缓存刷新策略 提供缓存命中率的监控 基础使用 使用一个示例介绍 Guava Cache 的基础使用方法 -- 缓存大小写转换的返回值...总结 本文介绍了 Guava Cache 一些常用的 API 、用法示例,以及需要警惕的一些使用误区。...总之非常灵活,使用 Guava Cache 的 API 可以满足大多数业务场景的缓存需求。 为什么是 Guava Cache,它的性能怎么样?...我现在主要是出于稳定性考虑,项目一直在使用 Guava Cache。据说有比 Guava Cache 快的本地缓存,但那点性能我的系统不是特别关心。 - END -

94130

Guava Cache

根据科普中国的定义,缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。...在这里,我们借用了硬件缓存的概念,当在Java程序中计算或查询数据的代价很高,并且对同样的计算或查询条件需要不止一次获取数据的时候,就应当考虑使用缓存。...目前有三种删除数据的方式,分别是:FIFO(先进先出)、LFU(定期淘汰最少使用次数)、LRU(淘汰最长时间未被使用)。...由于特定的工作流程,使用者必须在创建Cache或者获取数据时指定不存在数据时应当怎么获取数据。...Man{id='001', name='张三'} 使用loadingCache getIfPresent方法 第一次加载 null 使用loadingCache get方法 第一次加载 LoadingCache

59030

guava cache 用法详解

在 java 环境下,最常见的一种开源缓存框架要数 guava cache 了。简单的配置与优秀的性能,让它得到了广大 java 程序员的青睐。...2. guava cache使用 guava cache使用非常简单,下面是一个 sample: LoadingCache cache = CacheBuilder.newBuilder...3.2 使用方法 上面的示例中,我们在构建 guava cache 时,CacheBuilder 的 build 方法传入的参数是一个 CacheLoader 对象,并且实现了 load 方法。...cache 通过 load 方法获取数据,而当缓存中存在数据但已失效后,guava cache 则改为通过 reload 方法获取数据。...那么,guava cache 是如何做到上述机制的呢?敬请期待下一篇文章,让我来深入 guava cache 的源码,详细为您解读。

1.1K20

guava cache 源码分析

背景 上一篇文章中,我们详细介绍了 guava cache使用方法,尤其是在其中重点介绍了 guava cache 异步回种的用法,那么,性能优异的异步回种缓存究竟是如何实现的呢?...本文我们就来详细阅读 guava cache 的完整流程代码,抽丝剥茧,学习其中的思想与智慧。 guava cache 用法详解 2....基本思想 guava cache 异步回种基本思想: cache.get() 完整流程图: 3....guava cache 在上述情况下调用 lockedGetOrLoad() 方法获取数据,这个方法中,通过加 AQS 锁避免多个线程同时 load 获取数据,然后通过回调 load() 方法同步获取数据...总结 了解了 guava cache 异步回种的基本思想,也许你会觉得这一套解决方案的实现是如此简单,那么,我们知道,memcache、redis 都是只有提供了同步接口的,那么,你是否可以在此基础上实现一套异步回种方案呢

52910

Guava Cache使用的三种姿势

姿势一 使用expiredAferWriter 优点 简单 粗暴 缺点 同步阻塞问题:如果多个线程同时请求同一个过期的key,只有一个线程能够获得去加载缓存的锁,但是其他未获取加载缓存锁的线程也会阻塞。...---- 姿势二 使用expiredAfterWrite + refreshAfterWrite 使用注意 指定refreshAferWrite的时间小于expiredAfterWrite 必须使用LoadingCache...直接使用get获取缓存 优点 当到达刷新时间之后,只会有一个线程获得刷新缓存的锁,其他线程直接返回缓存中的旧值,仅阻塞刷新缓存的线程 缺点 刷新缓存的线程还是会被阻塞 show me the code...使用姿势二和三要注意缓存的刷新过期时间要设置的比加载过期时间短,否则体现不出优势 3....具体逻辑参照**com.google.common.cache.LocalCache$Segment**。这里贴出一些关键逻辑供各位参考: ? 只有在value!

1K20

读源码——Guava-Cache

今天,听同事介绍了Cuava-cache,这是个老牌缓存了,虽然近来被Caffine的出现遮盖了风头,但依然不能掩盖它往日的辉煌,至少在我们团队,还有很多项目在使用它,索性就以它为基础,对缓存做一次总结...缓存使用模式 Cache-Aside 即业务代码围绕缓存来写,由业务代码直接维护缓存; Cache-As-SoR 即把Cache看做 SoR,所有操作都是对Cache进行,然后Cache再委托给SoR进行真实的读...使用Read-Through 模式,需要配置一个CacheLoader组件用来回源到SoR加载源数据.Guava Cache和Ehcache 3.x都支持该模式,下面会有实现; ② write-through...Guava-Cache简单实现 public class CacheTest { static AtomicInteger ac = new AtomicInteger(1); public...statsCounter.recordMisses(1); } } else { return waitForLoadingValue(e, key, valueReference); } } 这是Guava-Cache

78320

Guava Cache缓存设计原理

Google开源的Java重用工具集库Guava里的一款缓存工具,实现的缓存功能: 自动将entry节点加载进缓存结构 当缓存的数据超过设置的最大值时,使用LRU算法移除 具备根据entry节点上次被访问或者写入时间计算它的过期机制...缓存的key被封装在WeakReference引用内 缓存的Value被封装在WeakReference或SoftReference引用内 统计缓存使用过程中命中率、异常率、未命中率等统计数据 Guava...Guava Cache数据结构图 ? ReferenceEntry是对一个键值对节点的抽象,它包含了key和值的ValueReference抽象类。...WriteQueue和AccessQueue 为了实现最近最少使用算法,Guava Cache在Segment中添加了两条链:write链(writeQueue)和access链(accessQueue...) .weakValues() .build(); cache.put("word","Hello Guava Cache"); System.out.println(cache.getIfPresent

99120

Guava 源码分析(Cache 原理)

前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。 我平时用的也挺频繁,这次就借助日常使用Cache 组件来看看 Google 大牛们是如何设计的。...Ehcache、Guava Cache 所以出现了一些专门用作 JVM 缓存的开源工具出现了,如本文提到的 Guava Cache。...Guava Cache 示例 之所以想到 GuavaCache,也是最近在做一个需求,大体如下: 从 Kafka 实时读取出应用系统的日志信息,该日志信息包含了应用的健康状况。...总结 最后再来总结下 GuavaCache。...其实 Guava Cache 为了满足并发场景的使用,核心的数据结构就是按照 ConcurrentHashMap 来的,这里也是一个 key 定位到一个具体位置的过程。

46620

Guava 源码分析(Cache 原理)

前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。 我平时用的也挺频繁,这次就借助日常使用Cache 组件来看看 Google 大牛们是如何设计的。...Ehcache、Guava Cache 所以出现了一些专门用作 JVM 缓存的开源工具出现了,如本文提到的 Guava Cache。...Guava Cache 示例 之所以想到 GuavaCache,也是最近在做一个需求,大体如下: 从 Kafka 实时读取出应用系统的日志信息,该日志信息包含了应用的健康状况。...总结 最后再来总结下 GuavaCache。 其实在上文跟代码时会发现通过一个 key 定位数据时有以下代码: ?...其实 Guava Cache 为了满足并发场景的使用,核心的数据结构就是按照 ConcurrentHashMap 来的,这里也是一个 key 定位到一个具体位置的过程。

93920
领券