guava cache知识点整理

Guava cache介绍


CacheBuilder 是 Guava 缓存库(Google 提供的一个 Java 工具库)中的一个类,用于创建和配置缓存实例。
Guava 缓存库提供了一套强大且易用的缓存解决方案,可以帮助开发者轻松地添加缓存功能以提高程序性能。而 CacheBuilder 是其中一个关键的构建器类,它提供了多种方法用于配置和创建缓存实例。


 CacheBuilder 的一些主要特点和功能如下:
链式调用:CacheBuilder 允许通过链式调用方法来配置缓存的各项参数,使得配置变得简洁明了。
maximumSize(long):指定缓存的最大容量,当缓存超过指定容量时,会按照一定的策略(例如LRU)进行缓存项的清理。
过期时间设置:使用 expireAfterWrite(duration, unit) 方法可以为缓存项设定写入后过期时间,即在一定时间后自动从缓存中移除。
弱引用键或值:可以使用 weakKeys() 和 weakValues() 方法将缓存的键或值设置为弱引用,这样当没有其他强引用指向它们时,垃圾回收器可以自动回收这些对象。

refreshAfterWrite(duration, unit) :为缓存项设置定时刷新,即在一定时间后自动更新缓存项的值,避免了缓存过期时的数据加载延迟。


统计信息:CacheBuilder 提供了统计缓存命中率等信息的功能,可以通过 recordStats() 方法开启统计,并通过 Cache.stats() 方法获取统计信息。
自定义缓存加载器:可以通过 build(CacheLoader) 方法传入自定义的缓存加载器,用于指定缓存项的加载逻辑。

项目中pom.xml引用

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>18.0</version>
</dependency>

代码实例:

Cache<String, String> localCache = CacheBuilder.newBuilder().initialCapacity(5).maximumSize(2000).concurrencyLevel(3).expireAfterWrite(10, TimeUnit.SECONDS).build();

1、getIfPresent(key):从现有的缓存中获取,如果缓存中有key,则返回value,如果没有则返回null;

2、getAll(Iterable<? extends K>)方法用来执行批量查询。默认情况下,对每个不在缓存中的键,getAll方法会单独调用CacheLoader.load来加载缓存项。可以通过重写load()方法来提高加载缓存的效率;

3、get(K):使用这个方法要么返回已经缓存的值,要么使用CacheLoader向缓存原子地加载新值。由于CacheLoader可能抛出异常,LoadingCache.get(K)也声明为抛出ExecutionException异常。
            如果你定义的CacheLoader没有声明任何检查型异常,则可以通过 getUnchecked(K) 查找缓存;但必须注意,一旦CacheLoader声明了检查型异常,就不可以调用getUnchecked(K)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java进阶之路66问 | 谈谈对熔断,限流,降级的理解

熔断&#xff08;Circuit Breaker&#xff09; 熔断机制类似于电路中的保险丝&#xff0c;用于在服务或系统出现异常或超负荷时暂时关闭&#xff0c;防止问题进一步扩大&#xff0c;待问题解决后再逐步恢复。这可以有效保护系统免受过载的影响。 想象你在使用电器时&#xff0…

JAVA 异步编程(异步,线程,线程池)一

目录 1.概念 1.1 线程和进程的区别 1.2 线程的五种状态 1.3 单线程,多线程,线程池 1.4 异步与多线程的概念 2. 实现异步的方式 2.1 方式1 裸线程&#xff08;Thread&#xff09; 2.1 方式2 线程池&#xff08;Executor&#xff09; 2.1.1 源码分析 2.1.2 线程池创建…

Linux exec 命令和Python exec 函数 区别

在 Linux 中&#xff0c;exec 是一个用于替换当前进程的命令&#xff0c;而在 Python 中&#xff0c;exec 是一个用于动态执行代码的函数。它们有不同的用途和语法。下面是它们的主要区别和解释为什么需要这样的设计。 Linux exec 命令 用途 在 Linux 中&#xff0c;exec 命…

南京邮电大学计算机考研考情分析!专业课均分127分!复试录取比例偏高近2:1!计算机类共录取543人!

南京邮电大学&#xff08;Nanjing University of Posts and Telecommunications&#xff09;&#xff0c;位于南京市&#xff0c;简称南邮&#xff08;NJUPT&#xff09;&#xff0c;是教育部、工业和信息化部、国家邮政局与江苏省共建高校&#xff0c;国家“双一流”建设高校&…

软考中级科目包含哪些?应该考哪个?

软考中级包含5个专业方向&#xff0c;分别是&#xff1a;计算机软件、计算机网络、计算机应用技术、信息系统、信息服务。这5个方向又对应15个软考中级科目。 信息系统包括&#xff1a;系统集成项目管理工程师、信息系统监理师、信息安全工程师、数据库系统工程师、信息系统管…

C# 中IEnumerable与IQuerable的区别

目的 详细理清IEnumerator、IEnumerable、IQuerable三个接口之间的联系与区别 继承关系&#xff1a;IEnumerator->IEnumerable->IQuerable IEnumerator&#xff1a;枚举器 包含了枚举器含有的方法&#xff0c;谁实现了IEnuemerator接口中的方法&#xff0c;就可以自定…

力扣Hot100之两数之和

解法一&#xff1a; 双层循环暴力求解&#xff0c;先在数组的一个位置定住然后在这个位置的后续位置进行判断&#xff0c;如果两个数加起来等于目标和那么就返回 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for i,num in enumerate(num…

Laravel队列的魔法:高效异步任务处理指南

Laravel队列的魔法&#xff1a;高效异步任务处理指南 在现代Web应用开发中&#xff0c;异步任务处理是提升用户体验和应用性能的关键技术之一。Laravel框架内置了一个强大的队列系统&#xff0c;允许开发者将耗时的任务如发送邮件、处理数据等放入队列中异步执行。本文将深入探…

Windows 系统利用 SSH 和 WSL2 子系统当服务器

由于最近组内需要将一台 Windows 系统的电脑 W A W_A WA​ 转成能通过 SSH 访问&#xff0c;并且能用 Linux 命令当服务器运行。忙活了一天&#xff0c;终于是把全部东西弄通了。 安装 SSH 首先就是 W A W_A WA​ 先要安装 OpenSSH 服务&#xff0c;直接按照下面的教程安装…

HCIE是什么等级的证书?

HCIE&#xff08;华为认证互联网专家&#xff0c;Huawei Certified Internetwork Expert&#xff09;是华为认证体系中的最高等级证书。它要求考生具备在复杂网络环境中规划、设计、部署、运维和优化网络的能力。HCIE认证是华为认证体系中最具挑战性和含金量的认证之一&#xf…

RocketMQ实现分布式事务

RocketMQ的分布式事务消息功能&#xff0c;在普通消息基础上&#xff0c;支持二阶段的提交。将二阶段提交和本地事务绑定&#xff0c;实现全局提交结果的一致性。 1、生产者将消息发送至RocketMQ服务端。 2、RocketMQ服务端将消息持久化成功之后&#xff0c;向生产者返回Ack确…

NDK R25b 交叉编译FFMpeg4,项目集成,附库下载地址

1.准备工作 文件下载&#xff1a; NDK R25b下载地址&#xff1a;Android NDK历史版本下载网址 - 君*邪 - 博客园 (cnblogs.com) FFmpeg4.4.4 下载地址&#xff1a;https://ffmpeg.org/releases/ffmpeg-4.4.4.tar.xz 环境配置&#xff1a; 本次编译环境是在PC虚拟机中使用U…

普通人还有必要学习 Python 之类的编程语言吗?

在开始前分享一些编程的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的对于编程的重要性&#xff0c;这里就不详谈了。 未来&#xff0c;我们和机器的交流会越来越多&#xff0c;编程可以简单看作是和机器对话并分发给机器任务。机器不仅越来越强大&#xff0…

QT下,如何获取控制台输入

最近工作中为了测试某个模块&#xff0c;需要把原先输入模块部分&#xff0c;改成控制台输入来方便测试。在QT中&#xff0c;我们可以使用 QTextStream 类来读取用户的输入来达到目的。下面是一个简单的例子&#xff1a; #include <QCoreApplication> #include <QTex…

C# —— CRC16 算法

CRC16:即循环冗余校验码。数据通信当中一种常用的查错校验码 其特征信息字段和校验字段的长度可以是任意选定的&#xff0c;对数据进行指定多项式计算 并且将得到的结果附加在帧的后面&#xff0c;接受的设备也执行类似的算法&#xff0c;以保证数据传输的正确性和完整性 crc…

Laravel的魔法纽带:深入理解Eloquent ORM的关联(Relationships)

Laravel的魔法纽带&#xff1a;深入理解Eloquent ORM的关联&#xff08;Relationships&#xff09; 在Laravel的世界中&#xff0c;Eloquent ORM&#xff08;对象关系映射&#xff09;是连接数据库和应用程序代码的桥梁。通过Eloquent&#xff0c;你可以轻松地定义和管理数据库…

鸿蒙语言基础类库:【@system.configuration (应用配置)】

应用配置 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.i18n]和[ohos.intl]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import configurati…

数据库安装部署教程

数据库的安装部署教程因不同的数据库管理系统&#xff08;DBMS&#xff09;而异&#xff0c;以下将以MySQL、SQL Server和Oracle为例&#xff0c;分别概述其安装部署的基本步骤。请注意&#xff0c;由于软件版本和操作系统的不同&#xff0c;具体步骤可能会有所变化。 一、MyS…

CSS Modules:重构前端样式的未来?

在前端开发领域&#xff0c;CSS Modules 是近年来备受关注的一种样式解决方案&#xff0c;它改变了传统 CSS 的全局共享模式&#xff0c;引入了一种局部作用域的概念。这种变化不仅提升了样式的可维护性和可复用性&#xff0c;还促进了组件化开发的进一步成熟。本文将深入探讨 …

常见CSS属性

常见CSS属性。 1. display: 定义&#xff1a;display 属性控制元素如何渲染在文档流中&#xff0c;影响了元素是否占用空间、位置及盒子模型的行为。 使用说明&#xff1a;它可以设置为如block, inline, inline-block, flex, grid, none等值&#xff0c;用于决定元素显示模式…