Guava Cache介绍

Guava是Google提供的一套Java工具包,而Guava Cache是一套非常完善的本地缓存机制(JVM缓
存)。
Guava cache的设计来源于CurrentHashMap,可以按照多种策略来清理存储在其中的缓存值且保持很
高的并发读写性能。

Guava Cache应用场景

本地缓存的应用场景:

  • 对性能有非常高的要求
  • 不经常变化
  • 占用内存不大
  • 有访问整个集合的需求
  • 数据允许不时时一致

guava cache

  • 高并发,不需要持久化

Guava Cache 的优势

  • 缓存过期和淘汰机制
    在GuavaCache中可以设置Key的过期时间,包括访问过期和创建过期
    GuavaCache在缓存容量达到指定大小时,采用LRU的方式,将不常使用的键值从Cache中删除
  • 并发处理能力
    GuavaCache类似CurrentHashMap,是线程安全的。
    提供了设置并发级别的api,使得缓存支持并发的写入和读取
    采用分离锁机制,分离锁能够减小锁力度,提升并发能力
    分离锁是分拆锁定,把一个集合看分成若干partition, 每个partiton一把锁。ConcurrentHashMap
    就是分了16个区域,这16个区域之间是可以并发的。GuavaCache采用Segment做分区。
  • 更新锁定
    一般情况下,在缓存中查询某个key,如果不存在,则查源数据,并回填缓存。(Cache Aside
    Pattern)
    在高并发下会出现,多次查源并重复回填缓存,可能会造成源的宕机(DB),性能下降
    GuavaCache可以在CacheLoader的load方法中加以控制,对同一个key,只让一个请求去读源并
    回填缓存,其他请求阻塞等待。
  • 集成数据源
    一般我们在业务中操作缓存,都会操作缓存和数据源两部分
    而GuavaCache的get可以集成数据源,在从缓存中读取不到时可以从数据源中读取数据并回填缓
  • 监控缓存加载/命中情况
    统计

Guava Cache创建方式

GuavaCache有两种创建方式:
CacheLoader和Callable callback

public class GuavaDemo {public static void main(String args[]) throws Exception {LoadingCache<String, Object> cache = CacheBuilder.newBuilder()// 最大3个 //Cache中存储的对象,写入3秒后过期.maximumSize(3).expireAfterWrite(3,//记录命中率 失效通知TimeUnit.SECONDS).recordStats().removalListener(newRemovalListener<Object, Object>() {public void onRemoval(RemovalNotification<Object, Object>notification) {System.out.println(notification.getKey() + ":" + notification.getCause());}}.build(new CacheLoader<String, Object>() {@Overridepublic String load(String s) throws Exception {return Constants.hm.get(s);}});/*初始化cache*/initCache(cache);System.out.println(cache.size());displayCache(cache);System.out.println("=============================");Thread.sleep(1000);System.out.println(cache.getIfPresent("1"));Thread.sleep(2500);System.out.println("=============================");displayCache(cache);}public static Object get(String key, LoadingCache cache) throws Exception {Object value = cache.get(key, new Callable() {@Overridepublic Object call() throws Exception {Object v = Constants.hm.get(key);//设置回缓存cache.put(key, v);return v;}});return value;}public static void initCache(LoadingCache cache) throws Exception {/*前三条记录*/for (int i = 1; i <= 3; i++) {cache.get(String.valueOf(i));}}/*** 获得当前缓存的记录** @param cache* @throws Exception*/public static void displayCache(LoadingCache cache) throws Exception {Iterator its = cache.asMap().entrySet().iterator();while (its.hasNext()) {System.out.println(its.next().toString());}}
}

CacheLoader
在创建cache对象时,采用CacheLoader来获取数据,当缓存不存在时能够自动加载数据到缓存中。

   public static final LoadingCache<String, List<Hot>> Cache = CacheBuilder.newBuilder().maximumSize(4).build(new CacheLoader<String, List<Hot>>() {@Overridepublic List<Hot> load(String s) throws Exception {return Collections.emptyList();}});

Callable Callback

    public static Object get(String key,LoadingCache cache)throws Exception{Object value=cache.get(key, new Callable() {@Overridepublic Object call() throws Exception {String v= Constants.hm.get(key);//设置回缓存cache.put(key,v);return v;}});return value;}

[由零开始]Guava Cache介绍和用法相关推荐

  1. Guava Cache介绍

    1.缓存回顾: 使用场景:互联网,数据越来越多,用户越来越多,并发量.吞吐量越来越大 使用数据库存储,分库分表,也不能满足要求,使用缓存,减轻数据库的压力 临时存储的数据 其他的场景:Session分 ...

  2. Guava Cache 原理分析与最佳实践

    前言 在大部分互联网架构中 Cache 已经成为了必可不少的一环.常用的方案有大家熟知的 NoSQL 数据库(Redis.Memcached),也有大量的进程内缓存比如 EhCache .Guava ...

  3. Guava Cache用法介绍

    背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...

  4. java缓存Guava Cache用法介绍

    一.背景 在日常开发中,有很多这种场合:有一些数据量不是很大,不会经常改动,并且访问非常频繁:但是,由于受限于硬盘IO的性能,或者远程网络等原因,获取可能非常耗时,导致我们的程序非常慢.这在某些业务上 ...

  5. Ehcache与Guava Cache的介绍

    Ehcache和Guava Cache一样都是本地缓存,也同为很成熟的JVM级别的缓存,可以满足绝大多数情况的需求.下面分别介绍一下这两种缓存技术 Ehcache Ehcache是一个用Java实现的 ...

  6. guava cache简单学习笔记

    guava cache 简单说一下,guava的代码质量极高,写法很值得借鉴:其次cache是计算机科学中非常常用且有效的技术,从处理器缓存到到应用程序本地缓存到分布式缓存,缓存的存在意义是存储器的金 ...

  7. 是什么让 Spring5 放弃了使用 Guava Cache?

    来源:https://albenw.github.io/posts/a4ae1aa2/ 概要 Caffeine是一个高性能,高命中率,低内存占用,near optimal 的本地缓存,简单来说它是Gu ...

  8. guava_使用Google Guava Cache进行本地缓存

    guava 很多时候,我们将不得不从数据库或另一个Web服务获取数据或从文件系统加载数据. 在涉及网络呼叫的情况下,将存在固有的网络延迟,网络带宽限制. 解决此问题的方法之一是在应用程序本地拥有一个缓 ...

  9. 使用Google Guava Cache进行本地缓存

    很多时候,我们将不得不从数据库或另一个Web服务获取数据或从文件系统加载数据. 在涉及网络呼叫的情况下,将存在固有的网络等待时间,网络带宽限制. 解决此问题的方法之一是在应用程序本地拥有一个缓存. 如 ...

最新文章

  1. Python中将dict转换为kwargs
  2. puppet report import
  3. mac python request ssl错误解决
  4. 我的博客今天0岁346天了,我领取了…
  5. Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
  6. P5895-[IOI2013]dreaming梦想【树的直径,结论】
  7. 使用JUnit对ADF应用程序进行单元测试
  8. Kaggle 官方教程:嵌入
  9. 常见的软件测试缺陷分类:遇到测试缺陷怎么处理?
  10. java volatitl_Java中的关键字volatitle
  11. 关于javascript的原型和原型链,看我就够了(一)
  12. DirectShow程序运行过程简析
  13. opencv Camshift
  14. QT6.1.2下载和安装教程
  15. linux怎样使用小米线刷工具,在linux上怎么样线刷小米手机
  16. 计算机软件系统验证报告,检验报告管理系统软件
  17. 【PC工具】压缩包密码破解工具,暴力破解压缩包密码,zip密码获取
  18. 聊天上怎么使用计算机,微信在聊天中置顶怎么用?微信文章在聊天中置顶使用方法...
  19. 记一次vue2.0+vue-video-player实现hls播放全过程
  20. 电商项目的数据库表设计(MySQL版)

热门文章

  1. 【甄选靶场】Vulnhub百个项目渗透——项目一:GoldenEye(密码爆破,图片逆向分析,内核提权)
  2. 踩坑日记 - Sortable 拖动树表格排序
  3. 服务器或网络卡的原因和状况。
  4. Extjs学习笔记之五——一个小细节renderTo和applyTo的区别 作者:Katmaier 来源:博客园
  5. 一个女孩的IT创业经历连载(三)
  6. H3C Wlan Option43简要说明
  7. Linux Shell编程学习笔记(4)
  8. 我常用的写作工具都在这儿了
  9. 技术的迭代职业生涯_“我在技术职业生涯中做出的最好的举动” –来自八位技术专家的见解。...
  10. 迷你仓发展历程,深圳宝师傅上门存储引领迷你自助仓储行业新方向