浅谈Guava Cache的参数使用

CacheLoader

用于数据加载方式比较固定且统一的场景,在缓存容器创建的时候就需要指定此具体的加载逻辑。通常开发中使用时我们需要继承CacheLoader类或写一个匿名实现类实现其load方法和reload方法

load方法

当执行get操作没有命中缓存或者判断缓存已经超出expireAfterWrite设置的时间即缓存过期时,会调用load方法进行回源逻辑,获取到新的数据并建立缓存。这个方法执行时是加锁的,并发访问一个没有缓存的key会阻塞。

reload方法

这个方法是用来重新加载缓存的,通常这个方法是配合refreshAfterWrite参数设置一起使用的,如果没有设置refreshAfterWrite参数则不会触发这个方法逻辑,只有再判断缓存写入时间超出refreshAfterWrite的值时才会调用reload方法执行刷新缓存的逻辑。

refreshAfterWrite参数

refreshAfterWrite参数和reload方法逻辑一同实现了Guava cache的缓存刷新。

当执行get访问缓存时,会判断缓存写入时间是否已经超出refreshAfterWrite参数值,如果超出则会加refresh锁并执行load方法回源查询获取新的数据建立缓存。

  • 同一时刻仅允许一个线程执行数据重新加载操作,并阻塞等待重新加载完成之后该线程的查询请求才会返回对应的新值作为结果。
  • 当一个线程正在阻塞执行reload方法时,其它线程此时来执行get请求的时候,会判断下数据需要refresh尝试获取到执行锁,由于获取不到锁所以其它线程的请求不会被阻塞等待reload执行完成,而是立刻返回当前的旧值。
  • 当执行reload方法的线程操作完成后,再有新的线程执行get请求的时候判断数据已经更新无需refresh,则直接返回当前内存中的当前值。 

在具体使用时,需要根据场景综合判断expireAfterWrite和refreshAfterWrite参数的使用:

  • 数据需要永久存储,且不会变更,这种情况下expire和refresh都并不需要设定
  • 数据极少变更,或者对变更的感知诉求不强,且并发请求同一个key的竞争压力不大,直接使用expire即可
  • 数据无需过期,但是可能会被修改,需要及时感知并更新缓存数据,直接使用refresh
  • 数据需要过期(避免不再使用的数据始终留在内存中)、也需要在有效期内尽可能保证数据的更新一致性,则采用expire与refresh两者结合 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读——llava

Visual Instruction Tuning LLaVA 指令智能体分为两类:端到端的,通过LangChain[1]/LLM[35]协调各种模型的系统。 数据集生成用GPT辅助生成的,具体不写了。 模型结构: input image Xv LLM:Vicuna visual encoder&a…

芯片到底是怎么访问外设

微型计算机的组成:CPURAM硬盘等 什么是FLASH? FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NV…

系列一、GitHub搜索技巧

一、GitHub搜索技巧 1.1、概述 作为程序员,GitHub大家应该都再熟悉不过了,很多时候当我们需要使用某一项技能而又无从下手时,通常会在百度(面向百度编程)或者在GitHub上通过关键字寻找相关案例,比如我想学…

nodejs+vue+ElementUi医院预约挂号系统3e3g0

本医院预约挂号系统有管理员,医生和用户。该系统将采用B/S结构模式,使用Vue和ElementUI框架搭建前端页面,后端使用Nodejs来搭建服务器,并使用MySQL,通过axios完成前后端的交互 管理员功能有个人中心,用户管…

springMVC-异常处理

一、四种异常形式 在springmvc中,处理异常有四种形式 1.局部异常 2.全局异常 3.自定义异常 4.统一异常(统一提示异常) 作用:可以使浏览器不出现丑陋的500错误提示,而跳转到另外的错误提示页面 另外,自定义…

Linux——缓冲区

我在上篇博客留下了一个问题,那个问题就是关于缓冲区的问题,我们发现 文件有缓冲区,语言有用户级缓冲区,那么缓冲区到底是什么?,或者该怎 么认识缓冲区?这篇文章或许会让你有所认识,…

【ONE·MySQL || 基础介绍】

总言 主要内容:MySQL在Centos 7下的安装(主要学习相关指令语句,理解安装操作是在做什么)、对MySQL数据库有一个基础认识。 文章目录 总言0、MySQL的安装与卸载(Centos 7)0.1、MySQL的卸载0.1.1、卸载不必要…

MySQL数据库 触发器

目录 触发器概述 语法 案例 触发器概述 触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的soL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录&am…

XUbuntu22.04之跨平台音频编辑工具(平替Audition):ocenaudio(二百零二)

加粗样式 简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏&#…

FastDDS编译

Windows installation from binaries download 里面有二级菜单 view 安装后切换至目录 C:\Program Files\eProsima\fastrtps 2.12.1\examples\cpp\dds cmd打开此目录 mkdir build cd build cmake … //cmake …可以换成下面这句,这是官网的推荐 cmake -Bbuilde…

nn.LSTM个人记录

简介 nn.LSTM参数 torch.nn.lstm(input_size, "输入的嵌入向量维度,例如每个单词用50维向量表示,input_size就是50"hidden_size, "隐藏层节点数量,也是输出的嵌入向量维度"num_layers, "lstm 隐层的层数,默认…

R语言中使用ggplot2绘制散点图箱线图,附加显著性检验

散点图可以直观反映数据的分布,箱线图可以展示均值等关键统计量,二者结合能够清晰呈现数据蕴含的信息。 本篇笔记主要内容:介绍R语言中绘制箱线图和散点图的方法,以及二者结合展示教程,添加差异比较显著性分析&#xf…

[Angular] 笔记 6:ngStyle

ngStyle 指令: 用于更新 HTML 元素的样式。设置一个或多个样式属性&#xff0c;用以冒号分隔的键值对指定。键是样式名称&#xff0c;带有可选的 .<unit> 后缀&#xff08;如 ‘top.px’、‘font-style.em’&#xff09;&#xff0c;值为待求值的表达式&#xff0c;得到…

KingbaseV8R6单实例定时全量备份步骤

此场景为单机数据库节点内部备份&#xff0c;方便部署和操作&#xff0c;但备份REPO与数据库实例处于同一个物理主机&#xff0c;冗余度较低。 前期准备 配置ksql免密登录(必须) 在Kingbase数据库运行维护中&#xff0c;经常用到ksql工具登录数据库&#xff0c;本地免密登录…

钓鱼与木马实践(仅供参考不可实践)

声明:内容仅供学习&#xff0c;请勿违法使用&#xff0c;违者后果自负 一.部署云服务器 购买一台云服务器,Windows&#xff08; 中文 &#xff09;版本即可 华为云官网&#xff1a;https://www.huaweicloud.com/ 登录后进入控制台购买完成后远程登录云服务器 二.部署WEB运行…

Zookeeper的学习笔记

Zookeeper概念 Zookeeper是一个树形目录服务&#xff0c;简称zk。 Zookeeper是一个分布式的、开源的分布式应用程序的协调服务 Zookeeper提供主要的功能包括&#xff1a;配置管理&#xff0c;分布式锁&#xff0c;集群管理 Zookeeper命令操作 zk数据模型 zk中的每一个节点…

springMVC-自定义拦截器

一、先来看一个需求 Spring MVC也可以使用拦截器对请求进行拦截处理&#xff0c;用户可以自定义拦截器来实现特定的功能&#xff0c;比如对临时文件的清除&#xff0c;或者对某些ip地址进行拦截器. 二、springMVC自定义拦截器介绍 (1)需要实现一个接口 HandlerInterceptor. (…

大创项目推荐 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

Stable-diffusion-webui本地部署和简要介绍

Stable Diffusion 是一款基于人工智能技术开发的绘画软件&#xff0c;它可以帮助艺术家和设计师快速创建高品质的数字艺术作品。是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;同时也可以应用于其他任务&#xff0c;如内补绘制、…

MySQL数据库 视图

目录 视图概述 语法 检查选项 视图的更新 视图作用 案例 视图概述 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存…