当前位置: 首页 > news >正文

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注解清除缓存的形式,将注解定义在返回类型为voidboolean类型的方法上,调用该方法就会自动清除缓存。

如下,@AoClear各字段用于定义要清除缓存的目标方法(Method)或构造方法(Constructor)

字段名默认值说明
targetClassObject.class目标方法(Method)或构造方法(Constructor)所属的类
methodName方法名,为空则清除缓存的目标为构造方法(Constructor)
parameterTypesClass<?>[]方法或构造方法的参数类型数组

支持在同一个方法上定义多个@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时&#xff0c;没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时&#xff0c;同事提到这个需求&#xff0c;他希望能够有方法主动去清理指定方法的缓存&#xff1a; 他的数据是由其他服务启动时提供的&#xff0c;他的方法…...

试析C#编程语言的特点及功能

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

Textual Learning2 -- 使用时的小问题

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

CST--如何在PCB三维模型中自由创建离散端口

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

C++中的虚函数表结构框架

一.虚函数表介绍 Virtual Table虚函数表是实现多态的 每个有虚函数的类的实现&#xff0c;都有个指向虚函数的指针表&#xff08;不管是父类还是子类&#xff09; 指向虚表的指针是作为数据成员存在实例对象中 当调用虚函数时&#xff0c;就去查找对象的虚表中指向整顿派生类函…...

【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&#xff0c;问题&#xff1a;本来是好的&#xff0c;突然编译运行报错&#xff0c;说是确少包&#xff0c; 解决方案&#xff1a;重启以后好了 2&#xff0c;有完美的马鞍波&#xff0c;为什么不能够转动呢&#xff1f; 原因是我这里模型的问题&#xff0c;我计算出来的是占…...

落石滑坡监测报警系统:创新保障高速公路安全

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

Linux开发讲课20--- QSPI

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

VMware ESXi 8.0U3 macOS Unlocker OEM BIOS 集成驱动版,新增 12 款 I219 网卡驱动

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

vuepress使用简介及个人博客搭建

目录 一、介绍二、环境准备三、安装运行vuepress四、目录结构五、配置文件六、导航栏配置七、导航栏logo八、浏览器图标九、侧边栏配置十、添加 Git 仓库和编辑链接十一、部署到GitHub十二、搭建成功 一、介绍 VuePress 是 Vuejs 官方提供的一个是Vue驱动的静态网站生成器&…...

c#文件读写

1.1读取文件 方法说明​File.ReadAllText(FilePath);​读取指定路径的文件​File.ReadAllText(FilePath, Encoding);​通过指定编码格式来读取指定文件​File.ReadAllBytes();​读取二进制文件&#xff0c;并把内容读取到一个字节数组​File.ReadAllLines();​以行的形式读取文…...

WIFI 企业级认证手段 EAP-TLS介绍

EAP-TLS&#xff08;EAP-Transport Layer Security&#xff09;被认为是WLAN网络里最安全的认证方法&#xff0c;因此被企业广泛采用。本文会针对EAP-TLS的基本原理进行介绍。 在介绍原理之前&#xff0c;先介绍下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 点(英文&#xff1a;Blackjack)是一种在赌场玩的纸牌游戏。这种游戏的参与者不是互相竞争&#xff0c;而是与赌场指定的庄家竞争。在本文中&#xff0c;我们将从头开始创建可在终端上玩的玩家与庄家之间的二十一点游戏。 二十一点规则 我们将为从未玩过二十一点的读者提供…...

Workbench密码登录登录失败

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

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收&#xff0c;标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台&#xff0c;用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括&#xff1…...

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

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

多线程引发的安全问题

前言&#x1f440;~ 上一章我们介绍了线程的一些基础知识点&#xff0c;例如创建线程、查看线程、中断线程、等待线程等知识点&#xff0c;今天我们讲解多线程下引发的安全问题 线程安全&#xff08;最复杂也最重要&#xff09; 产生线程安全问题的原因 锁&#xff08;重要…...

在晋升受阻或遭受不公待遇申诉时,这样写是不是好一些?

在晋升受阻或遭受不公待遇申诉时&#xff0c;这样写是不是好一些&#xff1f; 在职场中&#xff0c;晋升受阻或遭受不公待遇是员工可能面临的问题之一。面对这样的情况&#xff0c;如何撰写一份有效的申诉材料&#xff0c;以维护自己的合法权益&#xff0c;就显得尤为重要。#李…...

LeetCode 2710.移除字符串中的尾随零:模拟

【LetMeFly】2710.移除字符串中的尾随零&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/ 给你一个用字符串表示的正整数 num &#xff0c;请你以字符串形式返回不含尾随零的整数 num 。 示例 1&#xff1a; 输…...

代码随想录训练营第二十三天 39组合总和 40组合总和II 131分割回文串

第一题&#xff1a; 原题链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 终止条件&#xff1a; 用一个sum值来记录当前组合中元素的总和。当sum的值大于target的时候证明该组合不合适&#xff0c;直接return。当sum的值等于target的…...

【C++】数组、字符串

六、数组、字符串 讨论数组离不开指针&#xff0c;指针基本上就是数组的一切的基础&#xff0c;数组和指针的相关内容参考我的C系列博文&#xff1a;【C语言学习笔记】四、指针_通过变量名访问内存单元中的数据缺点-CSDN博客【C语言学习笔记】三、数组-CSDN博客 1、数组就是&…...

MySQL InnoDB支持几种行格式

数据库表的行格式决定了一行数据是如何进行物理存储的&#xff0c;进而影响查询和DML操作的性能。 在InnoDB中&#xff0c;常见的行格式有4种&#xff1a; 1、COMPACT&#xff1a;是MySQL 5.0之前的默认格式&#xff0c;除了保存字段值外&#xff0c;还会利用空值列表保存null…...

Day6: 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字

题目344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; void reverseString(vector<char>& s) {int len s.size();int left 0;int right len - 1;while (left < right){swap(s[left], s[right--]);}return;} 题目541. 反转字符串 II - 力扣&#xff0…...

kubekey 离线安装高可用 kubernetes 集群

1. 准备环境 版本&#xff1a; kubernetes: v1.29.2 kubesphere: v3.4.1 kubekey: v3.1.1 说明&#xff1a; kubekey 只用于安装 kubernetes&#xff0c;因为 kubesphere 的配置在安装时经常需要变动&#xff0c;用 ks-installer 的 yaml 文件更好管理&#xff1b;ks-installe…...

大数据面试题之Hive(2)

目录 Hive的join操作原理&#xff0c;leftjoin、right join、inner join、outer join的异同? Hive如何优化join操作 Hive的mapjoin Hive语句的运行机制&#xff0c;例如包含where、having、group by、orderby&#xff0c;整个的执行过程? Hive使用的时候会将数据同步到HD…...

求推荐几款http可视化调试工具?

Postman 非常流行的API调试工具&#xff0c;适用于构建、测试和文档化APIs。它支持各种HTTP方法&#xff0c;有强大的集合和环境管理功能&#xff0c;以及代码生成能力。 BB-API 是一款旨在提升开发效率的工具&#xff0c;它专注于提供简约、完全免费且功能强大的HTTP模拟请…...

Python逻辑控制语句 之 判断语句--if else结构

1.if else 的介绍 if else &#xff1a;如果 ... 否则 .... 2.if else 的语法 if 判断条件: 判断条件成立&#xff0c;执行的代码 else: 判断条件不成立&#xff0c;执行的代码 &#xff08;1&#xff09;else 是关键字, 后⾯需要 冒号 &#xff08;2&#xff09;存在冒号…...

有什么可以接单做的网站/郑州网站运营专业乐云seo

AD域环境部署 实验之前先克隆两台虚拟机&#xff0c;右键虚拟机点击管理再选择克隆 2. 点击下一步 3. 点击下一页 4. 选择创建完整克隆再点击下一页 5. 修改虚拟机名称和位置再点击完成即可 6. 克隆完成点击关闭 7. 启动刚克隆好的虚拟机 8. 输入密码进去虚拟机&#xff0c;进…...

WDCP运行WordPress/放心网站推广优化咨询

看这个题解吧&#xff1a;http://blog.csdn.net/wubaizhe/article/details/77338332 代码里顺便把几个常用的线性筛附上了。 Key&#xff1a;1、gcd(i,j)1利用莫比乌斯函数的性质进行转化。 2、变换求和符号的顺序。 3、发现&#xff0c;该式可以递推。 4、线性筛约数个数函数。…...

做网站网站制作/百度一下子就知道了

• 大数据技术- 存储&#xff0c;hdfs、Kafka&#xff1b;- 计算&#xff0c;MapReduce、Hive(类Sql)、Spark(基于内存)、Flink(流计算和批量计算)&#xff1b;- 查询&#xff0c;Nosql(Hbase、 Cassandra),olap(kylin,impala)&#xff1b;- 挖掘&#xff0c;TensorFlow&#x…...

做企业网站怎么收费的/电商网站首页

信息管理与信息系统专业学生可以通过深入学习、实践和探索&#xff0c;了解信息管理、数据库管理、信息系统分析、软件开发等内容&#xff0c;从而获得必要的技能和知识&#xff0c;以便在职业生涯中取得成功。此外&#xff0c;还可以主动参与实习、实践和实践项目&#xff0c;…...

wordpress 输入框/网络推广平台大全

变量 是可以改变的值&#xff0c;本质上是内存的空间&#xff0c;用来存储信息 数据类型 本质上是数据的一种存储方式&#xff0c;和它能参与的运算的一种抽象 数据类型的分类 值类型和引用类型的区别 值类型&#xff0c;从栈里互相引用&#xff1b; 引用类型&#xff0c;从堆里…...

wordpress编辑小工具栏/山东关键词网络推广

github常见查询操作小结...