博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring整合redis
阅读量:4604 次
发布时间:2019-06-09

本文共 3470 字,大约阅读时间需要 11 分钟。

在SSH项目中整合redis

利用spring中的AOP 对redis进行统一的管理

1. 相关Jar文件

下载并导入以下3个Jar文件:

commons-pool2-2.4.2.jar、jedis-2.3.1.jar、spring-data-redis-1.3.4.RELEASE.jar。

三个文件分别对应的下载地址:http://www.java2s.com/Code/JarDownload/spring-data/ ,repo1.maven.org/maven2/redis/clients/jedis/,http://commons.apache.org/proper/commons-pool/download_pool.cgi 

2. Redis配置文件

在src文件夹下面新建一个redis.properties文件,设置连接Redis的一些属性。

 

记住一定要在 spring创建jedisPool的时候,指定参数类型。否则会报错 jedis:Cannot open Redis connection due invalid URI

3. 自定义注解

在src文件夹下面新建一个注解文件;文件内容如下

@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface InterfaceCacheableDao {    String key();    String fieldKey();    int expireTime() default 3600;}

4. 建立AOP通知类

在src文件夹下面新建一个通知类,用于解析注解统一管理redis;

//通知类@Aspectpublic class RedisAdvice {    /**     * 获取注入对象     */    private RedisUtil redisUtil;        public RedisRedisUtil  getRedisUtil () {        return redisUtil;    }        public void setRedisUtil (RedisUtil redisUtil) {        this.redisUtil= redisUtil;    }    @SuppressWarnings("unchecked")    @Around("@annotation(com.samton.common.redis.dao.InterfaceCacheableDao)")    public Object around(ProceedingJoinPoint pjp) throws Throwable {        Object result =null;        InterfaceCacheableDao cacheable=null;        //获取注解上的完整方法        Method proxyMethod = ((MethodSignature)pjp.getSignature()).getMethod();        Method soruceMethod = pjp.getTarget().getClass().getMethod(proxyMethod.getName(), proxyMethod.getParameterTypes());            cacheable=soruceMethod.getAnnotation(com.samton.common.redis.dao.InterfaceCacheableDao.class);                if( null == cacheable ){            cacheable = pjp.getTarget().getClass().getAnnotation(com.samton.common.redis.dao.InterfaceCacheableDao.class);        }        //解析注解        String fieldKey =parseKey(cacheable.fieldKey(),soruceMethod,pjp.getArgs());                //获取方法的返回类型,让缓存可以返回正确的类型        Class returnType=((MethodSignature)pjp.getSignature()).getReturnType();                //使用redis 的hash进行存取,易于管理        result= redisUtil.hget(cacheable.key(), fieldKey,returnType);                if( null == result ){            try {                result=pjp.proceed();                Assert.notNull(fieldKey);                redisUtil.hset(cacheable.key(),fieldKey, result,cacheable.expireTime());            } catch (Throwable e) {                e.printStackTrace();            }        }                return result;    }             /**     *    获取缓存的key      *    key 定义在注解上,支持SPEL表达式     * @param pjp     * @return     */    private String parseKey(String key,Method method,Object [] args){          if(!key.startsWith("#")){            return key;        }        //获取被拦截方法参数名列表和参数 用于匹配spel 表达式的值        LocalVariableTableParameterNameDiscoverer u =               new LocalVariableTableParameterNameDiscoverer();          String [] paraNameArr=u.getParameterNames(method);                //使用SPEL进行key的解析        ExpressionParser parser = new SpelExpressionParser();         //SPEL上下文        StandardEvaluationContext context = new StandardEvaluationContext();        //把方法参数放入SPEL上下文中        for(int i=0;i

4. 测试

在某个方法上面加上注解

@InterfaceCacheableDao(key="channeDao",fieldKey="#channelId",expireTime=20)    public List test(int channelId) {        ......    }

大功告成

转载于:https://www.cnblogs.com/hhwww/p/10795778.html

你可能感兴趣的文章
输出的巧妙思想(解题技巧)
查看>>
python装饰器
查看>>
获取两个日期之间的所有日期列表
查看>>
第一章 算法在计算中的作用
查看>>
在CocoaPod中安装BmobSDK
查看>>
webpack入门之教你搭建简单的框架
查看>>
开通的第一篇
查看>>
[学习] nofollow
查看>>
Javascript 方法apply和call的差别
查看>>
POJ Cow Exhibition
查看>>
disruptor实操作手冊(二)
查看>>
动态规划 - 活动选择问题
查看>>
Git 2.0 更改 push default
查看>>
echarts地图点定位的问题
查看>>
springBoot整合mybatis、jsp 或 HTML
查看>>
新浪微博---首页技术点二.轮播图的实现
查看>>
6.高性能NIO框架netty
查看>>
线程锁
查看>>
Oracle语句补充
查看>>
vuex使用方法
查看>>