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;
    }

}

猜你喜欢

转载自www.cnblogs.com/durp/p/9214729.html
今日推荐