Redis+自定义注解+AOP实现缓存

本文介绍了如何通过自定义注解和AOP在方法上实现查询缓存。自定义注解包含数据库名和操作类型属性,AOP切面根据注解判断读写操作,读取时从Redis缓存获取,写操作时清除对应缓存。代码示例展示了具体实现过程。
摘要由CSDN通过智能技术生成

闲着没事研究aop实现查询缓存,闷头敲代码,敲出了以下东西,希望看到的大神指正!

一、自定义注解
通过自定义注解,在修饰的方法上添加该注解,在aop中切入,为该方法添加缓存到redis中

package com.wwy.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 自定义缓存注解
 * @author wwy
 * @date 2019年12月13日
 * @version v0.0.1
 *
 */
@Retention(RetentionPolicy.RUNTIME)//声明注解何时起作用(运行时)
@Target({
   ElementType.METHOD,//声明注解作用的位置(方法)
		ElementType.TYPE})//声明注解作用的位置(类、接口、枚举)
public @interface Cache {
   
	/**
	 * 名称
	 * @return
	 */
String[] value() default"";
/**
 * 写入还是读取
 * 
 * @return
 */
boolean read() default true;
}

注解的value属性用于指定方法操作的数据库的名字,以便于后面再更新数据库数据时准确清楚缓存避免脏读,read属性指定该方法是读操作还是写操作,以便于后面切面中判断是要添加缓存还是清除缓存!
二、AOP
1.定义切面类,使用环绕通知,切入点为自定义注解修饰的方法,
2.利用全类名+方法名+数据库名作为redis中的key,
3.判断如果修饰方法的注解的read属性值为true,则先在缓存中查询,如果缓存中没有就在数据库中查询,然后把数据添加到缓存中
4.如果修饰方法的注解的read属性值为false,则遍历value属性,删除没有个包含value值得redis缓存
代码如下:

package com.wwy.aop;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.Set;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import com.wwy.annotation.Cache
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值