添加如下依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>其余在spring环境。
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceYdCache{//缓存时长longtime()default-1L;}@Aspect@ComponentpublicclassSysCacheAspect{@ResourceStringRedisTemplatestringRedisTemplate;@Around("@annotation(com.example.mybatisplus.aspect.YdCache)")publicObjectaround(ProceedingJoinPointpoint)throwsThrowable{//取得方法签名MethodSignaturesignature=(MethodSignature)point.getSignature();//取得方法对象Methodmethod=signature.getMethod();//取得缓存注解对象YdCacheydCache=method.getAnnotation(YdCache.class);//取得注解上的缓存时长longcacheTime=ydCache.time();//redis的key为类名:方法名:参数StringclassName=point.getTarget().getClass().getName();StringmethodName=signature.getName();StringargsJson=JSON.toJSONString(point.getArgs());Stringkey=className+":"+methodName+":"+argsJson;//取得返回值类类型Class<?>returnType=method.getReturnType();//从缓存取得数据StringcacheData=stringRedisTemplate.opsForValue().get(key);//命中缓存if(cacheData!=null){//返回缓存数据returnJSON.parseObject(cacheData,returnType);}//没命中缓存 执行方法Objectresult=point.proceed();//设置缓存,缓存时长为负数则永久缓存if(cacheTime<0){stringRedisTemplate.opsForValue().set(key,JSON.toJSONString(result));}else{//缓存指定时长stringRedisTemplate.opsForValue().set(key,JSON.toJSONString(result),cacheTime,TimeUnit.SECONDS);}returnresult;}}
在方法上添加注解即可,time为缓存时间