java:aocache 0.4.0 缓存控制机制
aoocache发布第一个版本0.1.0时,没有考虑到使用aocache的项目对方法缓存的控制需求。
场景
给同事做培训时,同事提到这个需求,他希望能够有方法主动去清理指定方法的缓存:
他的数据是由其他服务启动时提供的,他的方法要根据这些数据进行复杂计算返回结果。
如果其他服务重启了,会刷新这些数据,如果使用aocache提供的方法缓存机制,他就需要有办法能清理这些缓存。
缓存控制
我觉得这个需求很合理有普遍性,于是在最新版本0.4.0增加了缓存控制机制.
以两种方法提供缓存清理功能:
- 直接方法调用方式
- 注解方式
clear()
aocache提供以下两个clear
方法直接清除指定方法/构造方法的调用缓存
/*** 清除{@link Member}对应的缓存,为{@code null}或不存在对应的缓存忽略* @param member*/public void clear(Member member);/*** 清除{@link Member}对应的缓存,为{@code null}或不存在对应的缓存忽略* @param member* @throws NoSuchMethodException 没有找到指定的方法/构造方法*/public void clear(Class<?>clazz,String methodName, Class<?>[]parameterTypes);
@AoClear
aocache提供还提供了通过@AoClear
注解清除缓存的形式,将注解定义在返回类型为void
或boolean
类型的方法上,调用该方法就会自动清除缓存。
如下,@AoClear
各字段用于定义要清除缓存的目标方法(Method)或构造方法(Constructor)
字段名 | 默认值 | 说明 |
---|---|---|
targetClass | Object.class | 目标方法(Method)或构造方法(Constructor)所属的类 |
methodName | 空 | 方法名,为空则清除缓存的目标为构造方法(Constructor) |
parameterTypes | Class<?>[] | 方法或构造方法的参数类型数组 |
支持在同一个方法上定义多个
@AoClear
注解,清除多个方法或构造方法的缓存
清理缓存的切入点在方法调用正常返回时 (@AfterReturning
)。
如果@AoClear
注解定义在返回类型非boolean
的类型方法上,即为强制清理模式,方法返回时直接执行清理动作。
如果@AoClear
注解定义在返回类型为boolean
的类型方法上,即为灵活清理模式,方法返回时返回值为true时才执行清理动作。
@AoCacheablepublic <D extends Date> D parseDateString(String dateStr, Class<D> targetClass) {return DateSupport.parseDateString(dateStr,targetClass);}@AoCacheablepublic <D extends Date> D parseDateString2(String dateStr, Class<D> targetClass) {return DateSupport.parseDateString(dateStr,targetClass);}/**** 多注解支持清理多个缓存*/@AoClears({@AoClear(methodName = "parseDateString",parameterTypes = {String.class,Class.class}),@AoClear(methodName = "parseDateString2",parameterTypes = {String.class,Class.class}) })private void clearForce() {}@AoClear(methodName = "parseDateString",parameterTypes = {String.class,Class.class})private boolean clearTrue() {return true;}@AoClear(methodName = "parseDateString",parameterTypes = {String.class,Class.class})private boolean clearFalse() {return false;}
对于我的同事来说,注解方式更合适他,他可以将@AoClear
注解加在服务心跳侦听器方法上,只要其他服务重新上线,就自动实现缓存清理,除了注解不用多写一行代码。
aoacahe快速入门
关于aocache的使用参见之前的博客《java:aocache:基于aspectJ实现的方法缓存工具》
完整示例
完整的示例参见示例项目 aocache-example的代码:
aocache-example-ctw/src/test/java/com/gitee/l0km/aocache/example/ctw/AocacheCtwClearTest.java的test1Timecost()
测试方法
相关文章:
java:aocache 0.4.0 缓存控制机制
aoocache发布第一个版本0.1.0时,没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时,同事提到这个需求,他希望能够有方法主动去清理指定方法的缓存: 他的数据是由其他服务启动时提供的,他的方法…...

试析C#编程语言的特点及功能
行步骤,而不必创建新方法。其声明方法是在实例化委托基础上,加一对花括号以代表执行范围,再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…...

Textual Learning2 -- 使用时的小问题
1、出现的问题: 在vscode里面直接运行函数会显示报错: 我尝试在vscode中含textual库的环境下运行,但仍然报错 2、解决方案: 在命令行中运行: 首先按winR,输入cmd打开命令行 或在已经安装的conda环境&a…...

CST--如何在PCB三维模型中自由创建离散端口
在使用CST电磁仿真软件进行PCB的三维建模时,经常会遇到不能自动创建离散端口的问题,原因有很多,比如:缺少元器件封装、开路端口、多端子模型等等,这个时候,很多人会选择手动进行端口创建,但是&a…...

C++中的虚函数表结构框架
一.虚函数表介绍 Virtual Table虚函数表是实现多态的 每个有虚函数的类的实现,都有个指向虚函数的指针表(不管是父类还是子类) 指向虚表的指针是作为数据成员存在实例对象中 当调用虚函数时,就去查找对象的虚表中指向整顿派生类函…...
【ES】--Elasticsearch的高亮模式
目录 一、高亮策略1、Fast Vector Highlighter(快速向量高亮器)2、Posting Highlighter(帖子高亮器)3、Unified Highlighter(统一高亮器)4、Plain Highlighter(普通高亮器)5、总结二、高亮参数三、高亮案例解析1、words_one配置解析2、words_two配置解析3、words_three…...

使用matlab开发stm32总结,stm32-matlab常见的问题处理以及报错合集
1,问题:本来是好的,突然编译运行报错,说是确少包, 解决方案:重启以后好了 2,有完美的马鞍波,为什么不能够转动呢? 原因是我这里模型的问题,我计算出来的是占…...

落石滑坡监测报警系统:创新保障高速公路安全
在现代交通建设中,高速公路的安全性和稳定性至关重要。特别是易发生落石区域,如何有效预防和应对落石滑坡带来的事故成为了一项关键性挑战。为此,落石滑坡监测报警系统应运而生,它通过先进的技术手段,为高速…...

Linux开发讲课20--- QSPI
SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口,一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,为 PCB 的布局上节省空间…...

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动
VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动 VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U3 集成驱动版,在个人电脑上运行企业级工作负载 请访…...

vuepress使用简介及个人博客搭建
目录 一、介绍二、环境准备三、安装运行vuepress四、目录结构五、配置文件六、导航栏配置七、导航栏logo八、浏览器图标九、侧边栏配置十、添加 Git 仓库和编辑链接十一、部署到GitHub十二、搭建成功 一、介绍 VuePress 是 Vuejs 官方提供的一个是Vue驱动的静态网站生成器&…...
c#文件读写
1.1读取文件 方法说明File.ReadAllText(FilePath);读取指定路径的文件File.ReadAllText(FilePath, Encoding);通过指定编码格式来读取指定文件File.ReadAllBytes();读取二进制文件,并把内容读取到一个字节数组File.ReadAllLines();以行的形式读取文…...

WIFI 企业级认证手段 EAP-TLS介绍
EAP-TLS(EAP-Transport Layer Security)被认为是WLAN网络里最安全的认证方法,因此被企业广泛采用。本文会针对EAP-TLS的基本原理进行介绍。 在介绍原理之前,先介绍下WLAN网络里认证加密手段涉及到的一些基本概念。 1 802.1x IEE…...

【网络架构】keepalive
目录 一、keepalive基础 1.1 作用 1.2 原理 1.3 功能 二、keepalive安装 2.1 yum安装 2.2 编译安装 三、配置文件 3.1 keepalived相关文件 3.2 主配置的组成 3.2.1 全局配置 3.2.2 配置虚拟路由器 四、实际操作 4.1 lvskeepalived高可用群集 4.2 keepalivedngi…...

【Dison夏令营 Day 03】使用 Python 创建我们自己的 21 点游戏
21 点(英文:Blackjack)是一种在赌场玩的纸牌游戏。这种游戏的参与者不是互相竞争,而是与赌场指定的庄家竞争。在本文中,我们将从头开始创建可在终端上玩的玩家与庄家之间的二十一点游戏。 二十一点规则 我们将为从未玩过二十一点的读者提供…...

Workbench密码登录登录失败
Workbench密码登录登录失败操作系统禁用了密码登录方式,会导致使用了正确的用户名和密码仍无法登录 sudo vim /etc/ssh/sshd_config 输入O进入编辑 改完后重启 systemctl restart sshd.service 登录报错 有试了几遍登上了 可能是改完还要等一会儿...

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收
哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收,标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台,用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括࿱…...
009、MongoDB的分片策略
目录 MongoDB的分片策略:范围分片vs哈希分片 1. 范围分片(Range Sharding) 1.1 工作原理 1.2 优点 1.3 缺点 1.4 研究支持 2. 哈希分片(Hash Sharding) 2.1 工作原理 2.2 优点 2.3 缺点 2.4 研究支持 3. 选择合适的分片策略 4. 实践案例 4.1 电子商务平台 4.2 社…...

go~缓存设计配合singleFlight
一个缓存设计,配合go的singleFlight 最开始的设计如下 添加分布式缓存 上线后分布式缓存上涨的流量并不等于下游下降的流量,而是下游下降的流量 * 2~3 究其原因,就是采用了go的singleFlight,假定请求缓存时长10ms&a…...

多线程引发的安全问题
前言👀~ 上一章我们介绍了线程的一些基础知识点,例如创建线程、查看线程、中断线程、等待线程等知识点,今天我们讲解多线程下引发的安全问题 线程安全(最复杂也最重要) 产生线程安全问题的原因 锁(重要…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...