zoukankan      html  css  js  c++  java
  • Redis的基本使用

    redis.properties

    redis.ip=redis.test.yiyaowang.com
    redis.port=6379
    redis.timeout=8000
    redis.maxTotal=100
    redis.maxIdle=200
    redis.maxWaitMillis=8000
    redis.testOnBorrow=true

    spring-redis.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
        <bean id="dbkeypropertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <!--密钥存放位置,由运维告知-->
                    <value>file:/etc/dbprivatekey.properties</value>
                    <value>classpath*:config/*.properties</value>
                </list>
            </property>
        </bean>
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="testOnBorrow" value="true"/>
            <property name="maxIdle" value="200"/>
            <property name="maxWaitMillis" value="8000"/>
        </bean>
        <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
            <constructor-arg index="0">
                <ref bean="jedisPoolConfig"/>
            </constructor-arg>
            <constructor-arg index="1" value="${redis.ip}" type="String"/>
            <constructor-arg index="2" value="${redis.port}" type="int"/>
            <constructor-arg index="3" value="${redis.timeout}" type="int"/>
            <constructor-arg index="4" value="${redis.common.key}" type="String"/>  <!--redis.common.key 定义在 /etc/dbprivatekey.properties 中 -->
        </bean>
    </beans>
    JedisUtil.java
    package com.yyw.scs.util;
    
    import com.yyw.scs.framework.kit.CustomizedPropertyConfigurer;
    import org.apache.commons.lang3.StringUtils;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Service;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    import java.util.LinkedHashSet;
    import java.util.Set;
    
    @Service
    public class JedisUtil {
    
        private static Logger logger = LoggerFactory.getLogger(JedisUtil.class);
    
    
        public static String DEFAULT_PREF = "scs_delay_rate_";
        /**
         * 默认过期时间10分钟
         */
        public static int DEFAULT_EXP_TIME = 10 * 60;
    
        public static String DATE_TIME = "初始化";
    
        private JedisPool jedisPool;
    
        /**
         * 释放jedis资源
         *
         * @param jedis
         */
        public void returnResource(final Jedis jedis) {
            if (jedis != null && jedisPool != null) {
                jedisPool.returnResource(jedis);
            }
        }
    
        public String get(String key) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                return jedis.get(key);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Get key erroe :" + e);
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnBrokenResource(jedis);
                }
                return null;
            } finally {
                returnResource(jedis);
            }
        }
    
        public byte[] bget(String key){
            Jedis jedis = null;
            try {
                jedis=getJedis();
                return jedis.get(key.getBytes());
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Get key erroe :"+e);
                if(jedisPool != null && jedis != null){
                    jedisPool.returnBrokenResource(jedis);
                }
                return null;
            }finally{
                returnResource(jedis);
            }
        }
    
        public String getStr(String key) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                return jedis.get(key);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Get key erroe :" + e);
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnBrokenResource(jedis);
                }
                return null;
            } finally {
                returnResource(jedis);
            }
        }
    
        public void set(String key, String value, int seconds) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.set(key, value);
                jedis.expire(key, seconds);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Set keyex error : " + e);
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnBrokenResource(jedis);
                }
            } finally {
                returnResource(jedis);
            }
        }
    
        public void bset(String key, byte[]  value, int seconds){
            Jedis jedis = null;
            try {
                jedis=getJedis();
                jedis.set(key.getBytes(), value);
                jedis.expire(key.getBytes(), seconds);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Set keyex error : "+e);
                if(jedisPool != null && jedis != null){
                    jedisPool.returnBrokenResource(jedis);
                }
            } finally{
                returnResource(jedis);
            }
        }
    
        public void del(String key) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.del(key);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Del key error : " + e);
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnBrokenResource(jedis);
                }
            } finally {
                returnResource(jedis);
            }
        }
    
        public void set(String key, String value) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.set(key, value);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Set key error : " + e);
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnBrokenResource(jedis);
                }
            } finally {
                returnResource(jedis);
            }
        }
    
        //获取所有的keys
        public Set<String> keys(final String pattern) {
            Set<String> keys = new LinkedHashSet<String>();
            Jedis jedis = null;
            try {
                jedis = getJedis();
                keys = jedis.keys(pattern);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Set key error : " + e);
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnBrokenResource(jedis);
                }
            } finally {
                if (jedisPool != null && jedis != null) {
                    jedisPool.returnResource(jedis);
                }
            }
            return keys;
        }
    
        /**
         * 同步获取Jedis实例
         *
         * @return Jedis
         */
        public synchronized Jedis getJedis() {
            if (jedisPool == null) {
                jedisPool = getJedisPool();
            }
            Jedis jedis = null;
            try {
                if (jedisPool != null) {
                    jedis = jedisPool.getResource();
                }
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Get jedis error : " + e);
            }
            return jedis;
        }
    
        public JedisPool getJedisPool() {
            if (jedisPool == null) {
                try {
                    String ip = CustomizedPropertyConfigurer.getProperty("redis.ip");
                    String port = CustomizedPropertyConfigurer.getProperty("redis.port");
                    String timeout = CustomizedPropertyConfigurer.getProperty("redis.timeout");
                    String maxTotal = CustomizedPropertyConfigurer.getProperty("redis.maxTotal");
                    String maxIdle = CustomizedPropertyConfigurer.getProperty("redis.maxIdle");
                    String maxWaitMillis = CustomizedPropertyConfigurer.getProperty("redis.maxWaitMillis");
                    String testOnBorrow = CustomizedPropertyConfigurer.getProperty("redis.testOnBorrow");
                    String key = CustomizedPropertyConfigurer.getProperty("redis.common.key");
    
                    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
                    jedisPoolConfig.setMaxTotal(Integer.valueOf(maxTotal));
                    jedisPoolConfig.setMaxIdle(Integer.valueOf(maxIdle));
                    jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis));
                    jedisPoolConfig.setTestOnBorrow(Boolean.valueOf(testOnBorrow));
                    if (StringUtils.isNotEmpty(key))
                        jedisPool = new JedisPool(jedisPoolConfig, ip, Integer.valueOf(port), Integer.valueOf(timeout), key);
                    else {
                        jedisPool = new JedisPool(jedisPoolConfig, ip, Integer.valueOf(port), Integer.valueOf(timeout));
                    }
                } catch (Exception e) {
                    logger.error("JedisUtil init Error", e);
                }
            }
            return jedisPool;
        }
    
        public  String generateRedisKey(MethodSignature signature, Object[] args){
            StringBuilder keyBuilder =new StringBuilder(DEFAULT_PREF);
            String methodName =signature.getName();
            keyBuilder.append(methodName);
            if(args!=null && args.length>0){
                int i=0;
                for(Object arg:args){
                    keyBuilder.append("_arg").append(i++).append("_").append(String.valueOf(arg));
                }
            }
            return keyBuilder.toString();
        }
    }
    DelayRateServiceAspect.java
    package com.yyw.scs.wms.service.impl;
    
    import com.alibaba.fastjson.JSON;
    import com.yyw.scs.util.DateUtils;
    import com.yyw.scs.util.JedisUtil;
    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.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.Ordered;
    import org.springframework.stereotype.Component;
    
    import java.io.*;
    import java.util.Date;
    
    @Aspect
    @Component
    public class DelayRateServiceAspect implements Ordered {
    
        @Autowired
        private JedisUtil jedisUtil;
    
        private static Logger LOGGER = LoggerFactory.getLogger(DelayRateServiceAspect.class);
    
        @Around("execution(* com.yyw.scs.wms.service.impl.DelayRateServiceImpl.find*(..))")
        public Object timeAround(ProceedingJoinPoint joinPoint) {
            // 定义返回对象、得到方法需要的参数
            Object obj = null;
            try {
                Object[] args = joinPoint.getArgs();
                MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
                String redisKey = generateRedisKey(methodSignature, args);
                byte[] res = jedisUtil.bget(redisKey);
                if (res != null) {
                    obj = objectDeserialization(res);
                } else {
                    obj = joinPoint.proceed(args);
                    if (obj != null) {
                        jedisUtil.bset(redisKey, objectSerialiable(obj), JedisUtil.DEFAULT_EXP_TIME);
                        JedisUtil.DATE_TIME = DateUtils.dateFormatToDatestr(new Date(), "MM-dd HH:mm");
                    }
                }
            } catch (Throwable throwable) {
                throwable.printStackTrace();
                LOGGER.error("DelayRateServiceAspect 报错", throwable);
            }
            return obj;
        }
    
        //字符串反序列化为对象
        public Object objectDeserialization(byte[] value) {
            Object newObj = null;
            try {
                ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(value);
                ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
                newObj = objectInputStream.readObject();
                objectInputStream.close();
                byteArrayInputStream.close();
            } catch (UnsupportedEncodingException e) {
                LOGGER.warn("IOException ", e);
            } catch (ClassNotFoundException e) {
                LOGGER.warn("ClassNotFoundException ", e);
            } catch (IOException e) {
                LOGGER.warn("IOException ", e);
            }
            return newObj;
        }
    
        //对象序列化为字符串
        public byte[] objectSerialiable(Object obj) {
            Byte[] serStr = null;
            try {
                ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
                objectOutputStream.writeObject(obj);
                byte[] byteArray = byteArrayOutputStream.toByteArray();
    
                objectOutputStream.close();
                byteArrayOutputStream.close();
                return byteArray;
            } catch (UnsupportedEncodingException e) {
                LOGGER.warn("UnsupportedEncodingException data:" + JSON.toJSONString(obj), e);
            } catch (IOException e) {
                LOGGER.warn("IOException data:" + JSON.toJSONString(obj), e);
            }
            System.out.println(serStr);
            return null;
        }
    
        public String generateRedisKey(MethodSignature signature, Object[] args) {
            StringBuilder keyBuilder = new StringBuilder(JedisUtil.DEFAULT_PREF);
            String methodName = signature.getName();
            keyBuilder.append(methodName);
            if (args != null && args.length > 0) {
                int i = 0;
                for (Object arg : args) {
                    keyBuilder.append("_arg").append(i++).append("_").append(String.valueOf(arg));
                }
            }
            return keyBuilder.toString();
        }
    
        @Override
        public int getOrder() {
            return 1;
        }
    
    }
  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/durp/p/9214729.html
Copyright © 2011-2022 走看看