java定时更新缓存_SpringBoot AOP控制Redis自动缓存和更新的示例

导入redis的jar包

org.springframework.boot

spring-boot-starter-data-redis

2.0.4.RELEASE

编写自定义缓存注解

/**

* @Description: redis缓存注解 编写在需要缓存的类上

**/

@Documented

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface RedisCache {

}

编写切面类

package com.ys.edu.aop;

import com.ys.edu.utils.ResultUtils;

import org.apache.log4j.Logger;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Pointcut;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.ValueOperations;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.RedisSerializer;

import org.springframework.data.redis.serializer.StringRedisSerializer;

import org.springframework.stereotype.Service;

import org.aspectj.lang.reflect.MethodSignature;

import javax.annotation.Resource;

import java.util.Arrays;

import java.util.Set;

import java.util.concurrent.TimeUnit;

/**

* @ClassName RedisAOP

* @description: redis 切面缓存

**/

@Aspect

@Service

public class RedisAOP {

private static final Logger logger = Logger.getLogger(RedisAOP.class);

private static final Integer TIME_OUT = 30 ; //redis 存活时长 分钟

@Resource

private RedisTemplate redisTemplate;

/**

* @Title: queryCachePointcut

* @Description: 定义切点为缓存注解

* @return void

**/

@Pointcut("@within(com.ys.edu.annotation.RedisCache)")

public void queryCachePointcut(){

}

@Around("queryCachePointcut()")

public Object Interceptor(ProceedingJoinPoint joinPoint) throws Throwable{

long beginTime = System.currentTimeMillis();

MethodSignature signature = (MethodSignature) joinPoint.getSignature();

//类路径名

String classPathName = joinPoint.getTarget().getClass().getName();

//类名

String className = classPathName.substring(classPathName.lastIndexOf(".")+1,classPathName.length());

//获取方法名

String methodName = signature.getMethod().getName();

String[] strings = signature.getParameterNames();

String key = className+"_"+methodName+"_"+Arrays.toString(strings);

if((methodName.indexOf("select") != -1 && methodName.substring(0,6).equalsIgnoreCase("select")) || (methodName.in

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值