首页
学习
活动
专区
圈层
工具
发布

Guava学习:Cache缓存

摘要: 学习Google内部使用的工具包Guava,在Java项目中轻松地增加缓存,提高程序获取数据的效率。 一、什么是缓存?...换句话说,缓存就是以空间换时间,大部分应用在各种IO,数据库查询等耗时较长的应用当中。 二、缓存原理 当获取数据时,程序将先从一个存储在内存中的数据结构中获取数据。...();//EXPLICIT、REPLACED、COLLECTED、EXPIRED、SIZE }}; //可以使用RemovalListeners.asynchronous方法将移除监听器设为异步方法...通过RemovalListeners.asynchronous(RemovalListener,Executor)方法将监听器设为异步,笔者通过实验发现,异步监听不会在删除数据时立刻调用监听器方法。...刷新:主动刷新方法LoadingCache.referesh(K) 信息统计:CacheBuilder.recordStats() 开启Guava Cache的统计功能。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Guava Cache缓存设计原理

    Google开源的Java重用工具集库Guava里的一款缓存工具,实现的缓存功能: 自动将entry节点加载进缓存结构 当缓存的数据超过设置的最大值时,使用LRU算法移除 具备根据entry节点上次被访问或者写入时间计算它的过期机制...缓存的key被封装在WeakReference引用内 缓存的Value被封装在WeakReference或SoftReference引用内 统计缓存使用过程中命中率、异常率、未命中率等统计数据 Guava...Guava Cache数据结构图 ? ReferenceEntry是对一个键值对节点的抽象,它包含了key和值的ValueReference抽象类。...在加载完成后,将新加载的值更新到table中,即大部分情况下替换原来的LoadingValueReference CacheBuilder 提供Builder模式的CacheBuilder生成器来创建缓存...: 从缓存中取key的值,如果该值已经缓存过了则返回缓存中的值,如果没有缓存过可以通过某个方法来获取这个值。

    1.3K20

    Java本地缓存,完胜 Guava !

    在项目中用到的除了分布式缓存,还有本地缓存,例如:Guava、Encache,使用本地缓存能够很大程度上提升程序性能,本地缓存是直接从本地内存中读取,没有网络开销。...简介 Caffeine是基于Java8 的高性能缓存库,借鉴了 Guava 和 ConcurrentLinkedHashMap 的设计经验,拥有更高的缓存命中率和更快的读写速度。...性能比Guava更强 功能特性 基于时间的回收策略:包括写入时间和访问时间 基于容量的回收策略:一种是基于容量大小,一种是基于权重大小,两者只能取其一。....build(); } } 这种方式的弊端是所有的缓存都放在一起,最好的使用方式是每一个缓存单独创建缓存对象。...,无论读还是写的效率都远高于其他缓存,从 Spring5 开始的默认缓存实现就将 Caffeine 代替原来的Google Guava,支持多种回收策略,感兴趣的小伙伴赶快去试试吧~

    64130

    本地缓存组件 Guava cache 详解

    必要的时候也要考虑缓存的回收策略。 今天说的 Guava Cache 是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。...Cache存储的是键值对的集合,不同的是还需要处理缓存过期、动态加载等算法逻辑,需要额外信息实现这些操作,对此根据面向对象的思想,还需要做方法与数据的关联性封装,主要实现的缓存功能有:自动将节点加载至缓存结构中...可选配置分析 缓存的并发级别 Guava提供了设置并发级别的api,使得缓存支持并发的写入和读取。同 ConcurrentHashMap 类似Guava cache的并发也是通过分离锁实现。...在一般情况下,将并发级别设置为服务器cpu核心数是一个比较不错的选择。...我们在构建缓存时可以为缓存设置一个合理大小初始容量,由于Guava的缓存使用了分离锁的机制,扩容的代价非常昂贵。

    2.9K20

    Guava Cache -- Java 应用缓存神器

    3、在高并发情况下、能够正常缓存的更新以及返回。 带着这几个问题,来开始介绍Guava Cache这一趁手兵器。...到这里,使用场景以及Guava Cache 的使用方法已经了解完了,还需要一个工具来验证缓存的效果。...Guava 提供了recordStats()方法,相当于启动了记录模式,通过Cache.stats()方法可以获取CacheStats对象,里面存储着缓存的使用情况,通过观察它就可以知道缓存的命中率,加载耗时等信息...因此记得在修改之前将缓存数据先深拷贝。 在上述Guava Cache的使用中,当缓存过期后,此时请求过来就会阻塞等待缓存的重新拉取。。。有没有可能避免掉这种阻塞?...futureValue : fullyFailedFuture(t); } } Guava Cache 这种异步刷新缓存的方式是作者个人比较倾向的使用姿势,但是这里也有一个问题,缓存不会主动刷新的

    7.7K147

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

    前面刚说到Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。...这一篇我们将要谈到一个新的本地缓存框架:Caffeine Cache。它也是站在巨人的肩膀上-Guava Cache,借着他的思想优化了算法发展而来。...假如一直有请求访问该key,那么这个缓存将一直不会过期。 expireAfterWrite(long, TimeUnit): 在最后一次写入缓存后开始计时,在指定的时间后过期。...写入外部存储 CacheWriter 方法可以将缓存中所有的数据写入到第三方。...在2.x( Spring Boot 2.0(spring 5) )版本中已经用Caffine Cache取代了Guava Cache。毕竟有了更优的缓存淘汰策略。

    1.6K30

    使用 Guava 实现简洁高效的本地缓存

    使用 Guava 实现简洁高效的本地缓存 在现代应用中,缓存是提升性能和降低外部系统压力的关键组件。...Google 提供的 Guava 是一款强大的 Java 工具库,其中的 Guava Cache 模块提供了灵活的本地缓存功能。...本文将通过封装 Guava Cache,实现一个通用的缓存模板,帮助开发者快速构建可复用的缓存逻辑。 为什么封装 Guava Cache?...Guava Cache 功能强大,但如果每次使用都需要手动配置,可能会显得繁琐。通过封装一个抽象类,我们可以将常用的配置和逻辑提取出来,让子类只需实现数据加载逻辑即可,简化代码,提高复用性。...机制 作用 是否防多次查 DB synchronized的 DCL 确保 LoadingCache 对象只创建一次 ❌ 否 Guava 的 LoadingCache.get(key) Guava 内部会对

    50500

    Nginx反向代理永久性缓存

    图片Nginx缓存简介Nginx缓存方式有两种:永久性的缓存:这种缓存若不手动删除,该缓存文件会一直生效,因此,永久缓存只是用于缓存网站中几乎不会更改的内容;临时缓存:这种缓存是根据请求连接进行哈希后,...根据具体配置生成缓存文件目录,保存响应的数据,这个缓存的内容是可以删除的,具体时间自己可以设置;Nginx永久缓存配置server { listen 80; listen [::]:80; listen...request_uri; } location / { root /data/wwwroot/static.oneinstack.com; proxy_store on; # 开启本地缓存...proxy_store_access user:rw group:rw all:r; # 设置缓存的读写规则 proxy_temp_path cache_temp; # 设置反向代理接受的数据临时存储文件的目录

    63730

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

    常用的本地缓存方案有:Guava CacheCaffeineEhCache基于Guava Cache实现本地缓存Guava是Google团队开源的一款 Java 核心增强库,包含集合、并发原语、缓存、IO...Guava Cache支持很多特性:支持最大容量限制支持两种过期删除策略(插入时间和访问时间)支持简单的统计功能基于LRU算法实现引入依赖 com.google.guava...并且在 Spring5 (Springboot 2.x) 后,Spring 官方放弃了 Guava,而使用了性能更优秀的 Caffeine 作为默认缓存组件。...同时两者的API类似,使用Guava Cache的代码很容易可以切换到Caffeine,节省迁移成本。EhCacheEhCache是一个纯Java的进程内缓存框架,具有快速、精干的特点。...从功能性角度,Guava Cache和Caffeine功能类似,都是只支持堆内缓存,Encache相比功能更为丰富从性能上进行比较,Caffeine最优、GuavaCache次之,EhCache最差(下图是三者的性能对比结果

    4.3K12
    领券