java:aocache 0.4.0 缓存控制机制

6 篇文章 0 订阅
5 篇文章 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时才执行清理动作。

	@AoCacheable
	public <D extends Date> D parseDateString(String dateStr, Class<D> targetClass)   {
		return DateSupport.parseDateString(dateStr,targetClass);
	}
	@AoCacheable
	public <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.javatest1Timecost()测试方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值