Guava Cache应用以及源码解析

2023-05-16

Guava Cache的学习----https://github.com/google/guava

一、Guava的适用性


二、两种缓存的加载


1.第一种CacheLoader方式,返回的是LoadingCache对象,这个对象可以在build的时候对于返回值进行统一的计算


2.第二种Callable方式,返回的是Cache对象,get取值的时候可以自定义返回值的计算方式


三、源码解析

1.LocalCache可以看做是一个类似ConcurrentHashMap高性能的哈希表(其实结构完全一致,也包含segment,table等,只不过某些参数不一样)是线程安全的,但是其它线程并发修改了这个缓存,会显示在迭代器访问中,但是不会报ConcurrentModificationException错。默认使用equals方法(内容相同)判断key/value的相等,但如果申明了弱引用key 或者 弱/软引用的value,那么必须使用==判断相等(内存地址相同)


2.CacheBuilder:缓存构建器。构建缓存的入口,指定缓存配置参数并初始化本地缓存,通过build方法的参数不同,构建Cache和loadingCache,空参构建Cache,不空参构建LoadingCache。

3. Cache:接口,定义get、put、invalidate等操作,这里只有缓存增删改的操作,没有数据加载的操作。

4.LoadingCache:接口,继承自Cache。定义get、getUnchecked、getAll等操作,这些操作都会从数据源load数据。

       5.LocalCache:类。整个guava cache的核心类,包含了guava cache的数据结构以及基本的缓存的操作方法。

6.LocalLoadingCache:LocalCache内部静态类,继承自LocalManualCache类,实现LoadingCache接口。其所有操作也是调用成员变量localCache(LocalCache类型)的相应方法。

B:流程解析

1.CacheBuilder.newBuilder().build(new CacheLoader(){...})  CacheBuilder参数设置完毕后最后调用build(CacheLoader )构造,参数是用户自定义的CacheLoader缓存加载器,复写一些方法(load,reload),返回LoadingCache接口(一种面向接口编程的思想,实际返回具体实现类),具体build()方法流程如2所示


1.1 build方法内部用LocalCache对象的内部类LocalLoadingCache中的构造方法,加载缓存类


1.2 具体构造方法做了一些什么呢?可以看到构造方法实际上又构造了一个LoaclCache的缓存类,从而构造一个CacheLoad类型的LocalCache类就这样初始化了。


2.LocalCache的get操作如下


四、缓存回收机制

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Guava Cache应用以及源码解析 的相关文章

  • 设计模式(大大提高代码可维护性以及复用性)(持续更新)

    单例 xff08 Singleton xff09 模式 xff1a 某个类只能生成一个实例 xff0c 该类提供了一个全局访问点供外部获取该实例 xff0c 其拓展是有限多例模式 原型 xff08 Prototype xff09 模式 xf
  • 并发量、QPS 和TPS区别

    并发量 xff1a 系统同时处理的request 事务数 可以理解为 xff1a 系统同时处理的request数量 TPS xff1a 每秒处理的查询量 每秒钟request 事务 数量 可以理解为 xff1a 每秒处理的request 数
  • mysql-plus 字段验证策略fieldStrategy

    ignored 不管有没有有设置属性 xff0c 所有的字段都会设置到insert语句中 xff0c 如果没设置值 xff0c 全为null xff0c 这种在update 操作中会有风险 xff0c 把有值的更新为null not nul
  • Navicat 12 for MySQL最新版激活(注册机)

    整个过程在断网环境下 安装包也用刚下载的 转 https blog csdn net zhangli0910 article details 83785147 最新版注册机 43 Navicat下载 xff1a 链接 xff1a https
  • C_INCLUDES must be under the source or output directories

    Android项目N版本切到O版本 xff0c 同一个模块去mm xff0c 报C INCLUDES must be under the source or output directories错误 后来才找到原因 xff0c 是因为该模块
  • “MobaXterm X11 proxy: Unsupported authorisation protocol”解决方法

    服务器无法显示GUI图片问题 在解决这个问题的时候 xff0c 可能很多人都搜到了用sudo的方法 xff0c 但是在我们没有管理权限的情况下 xff0c 这个问题也是能解决的 报错信息 我的报错信息 xff1a MobaXterm X11
  • Linux 并发与竞争

    Linux是一个多任务操作系统 xff0c 肯定会存在多个任务共同操作同一段内存或者设备的情况 xff0c 多个任务甚至中断都能访问的资源叫做共享资源 xff0c 就和共享单车一样 在驱动开发中要注意对 共享资源的保护 xff0c 也就是要
  • linux man手册和设置中文版man手册

    http man he net linux 设置中文版man手册
  • win10宽带连接断网自动重连

    文章目录 1 断开网络连接 xff0c 重命名网络连接2 bat代码 xff1a 检测到断线自动重连3 设置开机自动执行3 1 方式一 xff1a 任务计划程序3 2 方式二 xff1a 用vbs代码开机运行bat 1 断开网络连接 xff
  • ubuntu20环境下使用DevStack安装Openstack-Wallaby(单节点、多节点)

    文章目录 一 单节点部署1 环境准备1 1 镜像源1 2 pip源1 3 安装依赖包 2 OpenStack安装 wallaby2 1 添加 96 stack 96 用户2 2 设置代理2 3 下载devstack xff0c 使用 96
  • 【操作系统】页面置换算法

    页面置换算法 在进程运行过程中 xff0c 若需要访问的物理块不在内存中 xff0c 就需要通过一定的方式来将页面载入内存 xff0c 而此时内存很可能已无空闲空间 xff0c 因此就需要一定的算法来选择内存中要被置换的页面 xff0c 这
  • 前端 好看实用的颜色大全(16进制)

  • 解决linux写入ntfs盘时报错:只读文件系统

    2018 10 28 更新 可能因为在挂载wimdows盘后 xff0c 强制关机造成的 xff0c 可使用 sudo ntfsfix dev 来修复 其中 xff0c 为具体哪个盘 xff0c 例如sudo ntfsfix dev sda
  • 【计算机网络】TCP IP通信处理过程

    1 数据包首部 每个分层中都会对所发送的数据附加一个首部 xff0c 其中包含了该层必要的信息 xff0c 如发送端地址 接收端地址以及协议等相关信息 2 发送数据包 1 xff09 应用程序处理 进行编码处理 xff08 相当于表示层功能
  • 【高性能定时器】 时间轮

    时间轮 简述 顾名思义 xff0c 时间轮就像一个轮子 xff0c 在转动的时候外界会指向轮子不同的区域 xff0c 该区域就可以被使用 因此只要将不同时间的定时器按照一定的方法散列到时间轮的不同槽 xff08 即时间轮划分的区域 xff0
  • 系统调用中断(EINTR)与SIGCHLD信号的处理

    一 被中断的系统调用 EINTR 的理解 1 慢系统调用是 xff1f 2 慢系统调用的类别3 EINTR产生的原因5 一般处理方法 二 SIGCHLD信号的处理 1 SIGCHLD信号的产生2 SIGCHLD信号的处理3 不处理SIGCH
  • 定时器与超时的设置

    一 相关时间函数 1 gettimeofday 2 time 3 clock 二 间隔定时器 1 setitimerval 2 getitimerval 3 实时定时器的使用 三 为阻塞操作设置超时 1 alarm 2 给read 设置读超
  • 解决tomcat启动时,端口被占用问题

    有时候我们启动tomcat的时候 xff0c 会提示端口被占用 xff0c 我们可以用下面的方法解决这个问题 1 进入cmd 2 输入netstat ano findstr 8080 xff08 注 xff1a 8080为被占用的端口名 x
  • Maven实战(六)--- dependencies与dependencyManagement的区别

    在上一个项目中遇到一些 jar 包冲突的问题 xff0c 之后还有很多人分不清楚 dependencies 与 dependencyManagement 的区别 xff0c 本篇文章将这些区别总结下来 1 DepencyManagement
  • VSFTP服务器使用retrieveFileStream返回null的问题

    VSFTP服务器使用retrieveFileStream返回null的问题 最近在使用vsftp在文件存储服务 xff0c 发现使用retrieveFileStream获取文件流的时候 xff0c 怎么获取都是空的 xff0c 网上有说返回

随机推荐

  • Android常用的一些make命令

    1 make jX X表示数字 xff0c 这个命令将编译Android系统并生成镜像 xff0c XX表示可以使用到的CPU核数 xff0c 这在配置好的电脑上特别有用 xff0c 公司的16核ubuntu服务器执行make j16只要不
  • 建造者模式详解

    建造者模式 建造者模式 xff08 Bulider Pattern xff09 是将一个复杂对象的构建过程与它的实现表示分离 xff0c 使得同样的构建过程可以创建不同的表示 xff0c 属于创建型模式 使用创建者模式对于用户而言只需要制定
  • LAMP架构简述

    目录 一 LAMP架构简述 二 各组件作用 三 构建LAMP平台 3 1编译安装Apache httpd服务 3 1 1 关闭防火墙 xff0c 将安装Apache所需软件包转到 opt目录下 3 1 2 安装环境依赖包 3 1 3 设置安
  • SLF4J源码分析

    介绍 官网 xff1a http www slf4j org github xff1a https github com qos ch slf4j SLF4J xff08 Simple Logging Facade for Java xff
  • ssh指定密码登陆远程服务器

    1 ssh远程登录 ssh登录远程服务器 xff0c 一般都通过ssh key方式免密码登陆 xff1b 也可以指定用户名 密码来登陆远程服务器 xff1b 如下 xff1a ssh IP l user p port 或者 ssh user
  • U盘制作ubuntu18.04.6系统安装盘

    U盘制作ubuntu18 04 6系统安装盘 1 1 下载镜像文件 ubuntu 18 04 6 desktop amd64 iso 2 下载u盘制作工具rufus3 15 3 运行rufus3 1 制作unbutun18 04启动U盘 3
  • Gradle全版本资源下载

    使用说明 1 xff0c 官网下载地址https services gradle org distributions 不同版本更改版本号即可 xff0c 官网下载不成功的 xff0c 嫌官网下载速度慢的 xff0c 可以直接在这里下载 2
  • .sh文件无法运行--权限问题

    下载了 sh后缀名脚本 结果双击安装文件时是用gedit打开 试着从终端打开 xff0c 提示 xff1a command not found 最后发现原来是文件的打开权限没有钩选 允许以程序执行文件 在图形界面下无法修改权限 xff0c
  • Android 遇坑之路及解决方案

    一 在状态栏之上弹自定义吐司 1 需求 xff1a UI设计师设计的原型图是在状态栏之上的位置弹一个自定义吐司 xff0c 我们的应用内全部都是沉浸式状态栏 xff0c 将状态栏隐藏掉了的 2 解决方案 xff1a 首先给toast设置ma
  • SCRUM框架包括3个角色、3个工件、5个活动、5个价值

    转自http www scrumcn com agile scrum knowledge library scrum html SCRUM 是一个用于开发和维持复杂产品的框架 Scrum 是一个用于开发和维持复杂产品的框架 xff0c 是一
  • rpm安装mysql报libc.so.X(GLIBC_XXX)(64bit) is needed by

    这个原因和linux本身自带的glibc版本不符合安装要求 xff0c 可以对glibc进行升级 解压 xff1a tar xvf glibc XXX tar gz进入glibc 2 14目录 xff1a cd glibc XXXX创建bu
  • rpm安装mysql

    引言 之前安装mysql都是直接使用tar包安装 xff0c 没有用过rpm xff0c 今天搞了一台腾讯云服务器 xff0c 所以想尝试一种新的安装mysql的方式 xff0c 下面分享安装过程和遇到的问题 第一 下载rpm包 官网地址
  • SpringBoot整合多数据源(Druid+Mybaties)

    SpringBoot整合多数据源 xff08 Druid 43 Mybaties xff09 1 添加pom文件 二 改yml 三 业务代码 1 mapper层 xff0c 注意要将不同库的Mapper xml文件分别存放不同的目录 xff
  • 浏览器 中设置断点调试

    1 xff1a 点击F12进入代码调试页面 xff0c 然后点击source xff0c 点击需要设置断点的地方 xff0c F5刷新 2 xff1a F11向下面执行一步 3 xff1a F10向上面执行一步
  • SpringBoot整合Mybaties

    一 引入pom 1 引入jdbc starter xff0c mybatis starter xff0c mysql connector 二 改yml yml的配置如下 xff1a 千万注意那块儿mapper的映射路径的后缀必须是Mappe
  • 国内下载centos的镜像网站大全

    http isoredirect centos org centos 7 isos x86 64 https blog 51cto com 14260602 2441705
  • Shiro实战以及源码解析

    一 明白什么是认证和授权 从百度百科上理解的 xff0c 感觉非常通俗易懂 你要登机 xff0c 你需要出示你的 passport 和源 ticket xff0c passport 是为了证明你张三确实是你百张三 xff0c 这就是 认证
  • 谈谈你对深拷贝和浅拷贝的理解-Java

    一 区别 1 深拷贝中既要拷贝基本数据类型也要拷贝引用类型的数据 xff0c 也就是说拷贝一份完全一样的对象 2 浅拷贝中之拷贝基本数据类型 xff0c 引用类型的数据只是拷贝了原来的引用 xff0c 并没有把引用的数据也拷贝 二 方式 1
  • 谈谈你对依赖注入(DI)和控制反转(IoC)的理解

    学习过Spring框架的人一定都会听过Spring的IoC 控制反转 DI 依赖注入 这两个概念 xff0c 对于初学Spring的人来说 xff0c 总觉得IoC DI这两个概念是模糊不清的 xff0c 是很难理解的 xff0c 今天和大
  • Guava Cache应用以及源码解析

    Guava Cache的学习 https github com google guava 一 Guava的适用性 二 两种缓存的加载 1 第一种CacheLoader方式 xff0c 返回的是LoadingCache对象 xff0c 这个对