zoukankan      html  css  js  c++  java
  • spring+redis整合

    redis整合,之前想要bean注入,但是因为框架太老,未成功,查找很多资料最终使用创建公共方法的方式使用redis

    不多说,直接上代码。

    pom

        <!-- redis -->
            <dependency>
                <groupId>org.springframework.data</groupId>        
                <artifactId>spring-data-redis</artifactId>        
                <version>1.6.0.RELEASE</version>        
            </dependency>     
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.7.3</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
                <version>2.3</version>
            </dependency>        

    redis.properties

    #redisu5730u5740
    redis.host=127.0.0.1
    #redisu7AEFu53E3u53F7
    redis.port=6379
    #redisu7684u5BC6u7801
    redis.auth=123456
    
    #u662Fu5426u4F7Fu7528JedisPoolu9ED8u8BA4u7684u914Du7F6E,u786Eu5B9Atrue,u9ED8u8BA4true
    defaultSetting=false;
    #jedisPoolu7684timeoutu65F6u95F4,u9ED8u8BA42000
    connectionTimeOut=2000
    #u8FDEu63A5u8017u5C3Du65F6u662Fu5426u963Bu585E, falseu62A5u5F02u5E38,tureu963Bu585Eu76F4u5230u8D85u65F6, u9ED8u8BA4true
    redis.blockWhenExhausted=true
    #u8BBEu7F6Eu7684u9010u51FAu7B56u7565u7C7Bu540D, u9ED8u8BA4DefaultEvictionPolicy(u5F53u8FDEu63A5u8D85u8FC7u6700u5927u7A7Au95F2u65F6u95F4,u6216u8FDEu63A5u6570u8D85u8FC7u6700u5927u7A7Au95F2u8FDEu63A5u6570)
    redis.evictionPolicyClassName=org.apache.commons.pool2.impl.DefaultEvictionPolicy
    #u662Fu5426u542Fu7528poolu7684jmxu7BA1u7406u529Fu80FD, u9ED8u8BA4true
    redis.jmxEnabled=true
    #u662Fu5426u542Fu7528u540Eu8FDBu5148u51FA, u9ED8u8BA4true
    redis.lifo=true
    #u6700u5927u7A7Au95F2u8FDEu63A5u6570, u9ED8u8BA48u4E2A
    redis.maxIdle=100
    #u6700u5927u8FDEu63A5u6570, u9ED8u8BA48u4E2A
    redis.maxTotal=300
    #u83B7u53D6u8FDEu63A5u65F6u7684u6700u5927u7B49u5F85u6BEBu79D2u6570(u5982u679Cu8BBEu7F6Eu4E3Au963Bu585Eu65F6BlockWhenExhausted),u5982u679Cu8D85u65F6u5C31u629Bu5F02u5E38, u5C0Fu4E8Eu96F6:u963Bu585Eu4E0Du786Eu5B9Au7684u65F6u95F4,u9ED8u8BA4-1
    redis.maxWaitMillis=-1
    #u9010u51FAu8FDEu63A5u7684u6700u5C0Fu7A7Au95F2u65F6u95F4 u9ED8u8BA41800000u6BEBu79D2(30u5206u949F)
    redis.minEvictableIdleTimeMillis=1800000
    #u6700u5C0Fu7A7Au95F2u8FDEu63A5u6570, u9ED8u8BA40
    redis.minIdle=0
    #u6BCFu6B21u9010u51FAu68C0u67E5u65F6 u9010u51FAu7684u6700u5927u6570u76EE u5982u679Cu4E3Au8D1Fu6570u5C31u662F : 1/abs(n), u9ED8u8BA43
    redis.numTestsPerEvictionRun=3
    #u5BF9u8C61u7A7Au95F2u591Au4E45u540Eu9010u51FA, u5F53u7A7Au95F2u65F6u95F4>u8BE5u503C u4E14 u7A7Au95F2u8FDEu63A5>u6700u5927u7A7Au95F2u6570 u65F6u76F4u63A5u9010u51FA,u4E0Du518Du6839u636EMinEvictableIdleTimeMillisu5224u65AD(u9ED8u8BA4u9010u51FAu7B56u7565) 
    redis.softMinEvictableIdleTimeMillis=1800000
    #u5728u83B7u53D6u8FDEu63A5u7684u65F6u5019u68C0u67E5u6709u6548u6027, u9ED8u8BA4false
    redis.testOnBorrow=false
    #u5728u7A7Au95F2u65F6u68C0u67E5u6709u6548u6027, u9ED8u8BA4false
    redis.testWhileIdle=false
    #u9010u51FAu626Bu63CFu7684u65F6u95F4u95F4u9694(u6BEBu79D2) u5982u679Cu4E3Au8D1Fu6570,u5219u4E0Du8FD0u884Cu9010u51FAu7EBFu7A0B, u9ED8u8BA4-1
    redus.timeBetweenEvictionRunsMillis=-1

    JedisPoolUtil

    package com.ly.zx.util.redis;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.util.Properties;
    
    import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    public class JedisPoolUtil {
        private static final String PROPERTIES_PATH = "redis.properties";  
        private static JedisPool jedisPool;  
      
          
        static {  
            if (jedisPool == null) {  
                try {  
                    init();  
                } catch (FileNotFoundException e) {  
                    e.printStackTrace();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
      
        /** 
         * 初始化Jedis连接池 
         *  
         * @throws IOException 
         */  
        private static void init() throws IOException {  
            URL resource = JedisPoolUtil.class.getClassLoader().getResource(PROPERTIES_PATH);  
            if (resource == null) {  
                throw new FileNotFoundException("没有找到指定redis的配置文件:" + PROPERTIES_PATH);  
            }  
            //加载配置文件  
            InputStream input = new FileInputStream(resource.getFile());  
            Properties p = new Properties();  
            p.load(input);  
            //开始配置JedisPool  
            String host = p.getProperty("redis.host") == null ? "localhost" : p.getProperty("redis.host");  
            int port = p.getProperty("redis.port") == null ? 6379 : Integer.parseInt(p.getProperty("redis.port"));  
            String auth = p.getProperty("redis.auth");  
            int poolTimeOut = p.getProperty("connectionTimeOut") == null ? 2000  
                    : Integer.parseInt(p.getProperty("connectionTimeOut"));  
            //判断使用默认的配置方式还是采用自定义配置方式,  
            boolean isSetDefault = p.getProperty("defaultSetting") == null ? true  
                    : Boolean.parseBoolean(p.getProperty("defaultSetting"));  
            if (isSetDefault) {  
                jedisPool = new JedisPool(new GenericObjectPoolConfig(), host, port, poolTimeOut, auth);  
            } else {  
                JedisPoolConfig config = new JedisPoolConfig();  
                String blockWhenExhausted = p.getProperty("redis.blockWhenExhausted");  
                if (blockWhenExhausted != null) {  
                    config.setBlockWhenExhausted(Boolean.parseBoolean(blockWhenExhausted));  
                }  
                String evictionPolicyClassName = p.getProperty("redis.evictionPolicyClassName");  
                if (evictionPolicyClassName != null) {  
                    config.setEvictionPolicyClassName(evictionPolicyClassName);  
                }  
                String jmxEnabled = p.getProperty("redis.jmxEnabled");  
                if (jmxEnabled != null) {  
                    config.setJmxEnabled(Boolean.parseBoolean(jmxEnabled));  
                }  
                String lifo = p.getProperty("redis.lifo");  
                if (lifo != null) {  
                    config.setLifo(Boolean.parseBoolean(lifo));  
                }  
                String maxIdle = p.getProperty("redis.maxIdle");  
                if (maxIdle != null) {  
                    config.setMaxIdle(Integer.parseInt(maxIdle));  
                }  
                String maxTotal = p.getProperty("redis.maxTotal");  
                if (maxTotal != null) {  
                    config.setMaxTotal(Integer.parseInt(maxTotal));  
                }  
                String maxWaitMillis = p.getProperty("redis.maxWaitMillis");  
                if (maxWaitMillis != null) {  
                    config.setMaxWaitMillis(Long.parseLong(maxWaitMillis));  
                }  
                String minEvictableIdleTimeMillis = p.getProperty("redis.minEvictableIdleTimeMillis");  
                if (minEvictableIdleTimeMillis != null) {  
                    config.setMinEvictableIdleTimeMillis(Long.parseLong(minEvictableIdleTimeMillis));  
                }  
                String minIdle = p.getProperty("redis.minIdle");  
                if (minIdle != null) {  
                    config.setMinIdle(Integer.parseInt(minIdle));  
                }  
                String numTestsPerEvictionRun = p.getProperty("redis.numTestsPerEvictionRun");  
                if (numTestsPerEvictionRun != null) {  
                    config.setNumTestsPerEvictionRun(Integer.parseInt(numTestsPerEvictionRun));  
                }  
                String softMinEvictableIdleTimeMillis = p.getProperty("redis.softMinEvictableIdleTimeMillis");  
                if (softMinEvictableIdleTimeMillis != null) {  
                    config.setSoftMinEvictableIdleTimeMillis(Long.parseLong(softMinEvictableIdleTimeMillis));  
                }  
                String testOnBorrow = p.getProperty("redis.testOnBorrow");  
                if (testOnBorrow != null) {  
                    config.setTestOnBorrow(Boolean.parseBoolean(testOnBorrow));  
                }  
                String testWhileIdle = p.getProperty("redis.testWhileIdle");  
                if (testWhileIdle != null) {  
                    config.setTestWhileIdle(Boolean.parseBoolean(testWhileIdle));  
                }  
                String timeBetweenEvictionRunsMillis = p.getProperty("redus.timeBetweenEvictionRunsMillis");  
                if (timeBetweenEvictionRunsMillis != null) {  
                    config.setTimeBetweenEvictionRunsMillis(Long.parseLong(timeBetweenEvictionRunsMillis));  
                }  
                jedisPool = new JedisPool(config, host, port, poolTimeOut, auth);  
            }  
      
        }  
      
        public static Jedis getJedis() {  
            return jedisPool.getResource();  
        }  
      
        public static void closeJedis(Jedis jedis) {  
            if (jedis != null) {  
                jedis.close();  
            }  
        }  
    }

    RedisUtil

    package com.ly.zx.util.redis;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.exceptions.JedisDataException;
    
    import com.alibaba.fastjson.JSON;
    
    public class RedisUtil {
        private static final int DEFAULT_SETEX_TIMEOUT = 60 * 60;// setex的默认时间  
          
        /** 
         * 添加一个字符串值,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int set(String key, String value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                if (jedis.set(key, value).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
      
        }  
      
        /** 
         * 缓存一个字符串值,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setEx(String key, String value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis(); 
                
                if (jedis.setex(key, DEFAULT_SETEX_TIMEOUT, value).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
        /** 
         * 判断key是否存在
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static boolean keyExists(String key) {
            if (isValueNull(key)) {  
                return false;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis(); 
                return jedis.exists(key); 
            }catch(Exception e){
                return false;
            }finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个字符串值,成功返回1,失败返回0,缓存时间以timeout为准,单位秒 
         *  
         * @param key 
         * @param value 
         * @param timeout 
         * @return 
         */  
        public static int setEx(String key, String value, int timeout) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                if (jedis.setex(key, timeout, value).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个指定类型的对象,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static <T> int set(String key, T value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = SerializeUtils.serialize(value);  
                if (jedis.set(key.getBytes(), data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个指定类型的对象,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static <T> int setEx(String key, T value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = SerializeUtils.serialize(value);  
                if (jedis.setex(key.getBytes(), DEFAULT_SETEX_TIMEOUT, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个指定类型的对象,成功返回1,失败返回0,缓存时间以timeout为准,单位秒 
         *  
         * @param key 
         * @param value 
         * @param timeout 
         * @return 
         */  
        public static <T> int setEx(String key, T value, int timeout) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = SerializeUtils.serialize(value);  
                if (jedis.setex(key.getBytes(), timeout, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 将一个数值+1,成功返回+后的结果,失败返回null 
         *  
         * @param key 
         * @return 
         * @throws JedisDataException 
         */  
        public static Long incr(String key) throws JedisDataException {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                return jedis.incr(key);  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 将一个数值-1,成功返回-后的结果,失败返回null 
         *  
         * @param key 
         * @return 
         * @throws JedisDataException 
         */  
        public static Long decr(String key) throws JedisDataException {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                return jedis.decr(key);  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个字符串值到list中,,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setList(String key, String... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Long result = jedis.rpush(key, value);  
                if (result != null && result != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个字符串值到list中,全部list的key默认缓存时间为1小时,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setExList(String key, String... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Long result = jedis.rpush(key, value);  
                jedis.expire(key, DEFAULT_SETEX_TIMEOUT);  
                if (result != null && result != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
      
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个字符串值到list中,全部list的key缓存时间为timeOut,单位为秒,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setExList(String key, int timeOut, String... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Long result = jedis.rpush(key, value);  
                jedis.expire(key, timeOut);  
                if (result != null && result != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
      
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个<T>类型对象值到list中,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static <T> int setList(String key, T... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                int res = 0;  
                for (T t : value) {  
                    byte[] data = SerializeUtils.serialize(t);  
                    Long result = jedis.rpush(key.getBytes(), data);  
                    if (result != null && result != 0) {  
                        res++;  
                    }  
                }  
                if (res != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个<T>类型对象值到list中,全部list的key默认缓存时间为1小时,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        
        public static <T> int setExList(String key, T... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                int res = 0;  
                for (T t : value) {  
                    byte[] data = SerializeUtils.serialize(t);  
                    Long result = jedis.rpush(key.getBytes(), data);  
                    if (result != null && result != 0) {  
                        res++;  
                    }  
                }  
                jedis.expire(key, DEFAULT_SETEX_TIMEOUT);  
                if (res != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个<T>类型对象值到list中,全部list的key缓存时间为timeOut,单位秒,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        
        public static <T> int setExList(String key, int timeOut, T... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                int res = 0;  
                for (T t : value) {  
                    byte[] data = SerializeUtils.serialize(t);  
                    Long result = jedis.rpush(key.getBytes(), data);  
                    if (result != null && result != 0) {  
                        res++;  
                    }  
                }  
                jedis.expire(key, timeOut);  
                if (res != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个List集合成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         * @throws IOException 
         * @throws RuntimeException 
         */  
        public static <T> int setList(String key, List<T> value) throws RuntimeException, IOException {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = SerializeUtils.serialize(value);  
                if (jedis.set(key.getBytes(), data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个List<T>集合,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准 
         *  
         * @param key 
         * @param value 
         * @return 
         * @throws IOException 
         * @throws RuntimeException 
         */  
      
        public static <T> int setExList(String key, List<T> value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = SerializeUtils.serialize(value);  
                if (jedis.setex(key.getBytes(), DEFAULT_SETEX_TIMEOUT, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            }catch(Exception e){
                return 0;  
            }    finally {  
            
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个List<T>集合,成功返回1,失败返回0,缓存时间以timeout为准,单位秒 
         *  
         * @param key 
         * @param value 
         * @param timeout 
         * @return 
         * @throws IOException 
         * @throws RuntimeException 
         */  
        public static <T> int setExList(String key, List<T> value, int timeout) throws RuntimeException, IOException {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = SerializeUtils.serialize(value);  
                if (jedis.setex(key.getBytes(), timeout, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个字符串到set,如果key存在就在就最追加,如果key不存在就创建,成功返回1,失败或者没有受影响返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setSet(String key, String... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Long result = jedis.sadd(key, value);  
                if (result != null && result != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个字符串set,如果key存在就在就最追加,整个set的key默认一小时后过期,如果key存在就在可以种继续添加,如果key不存在就创建,成功返回1,失败或者没有受影响返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setExSet(String key, String... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Long result = jedis.sadd(key, value);  
                jedis.expire(key, DEFAULT_SETEX_TIMEOUT);  
                if (result != null && result != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个字符串set,如果key存在就在就最追加,整个set的key有效时间为timeOut时间,单位秒,如果key存在就在可以种继续添加,如果key不存在就创建,,成功返回1,失败或者没有受影响返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static int setExSet(String key, int timeOut, String... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Long result = jedis.sadd(key, value);  
                jedis.expire(key, timeOut);  
                if (result != null && result != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个<T>类型到set集合,如果key存在就在就最追加,成功返回1,失败或者没有受影响返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        
        public static <T> int setSet(String key, T... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                int res = 0;  
                for (T t : value) {  
                    byte[] data = SerializeUtils.serialize(t);  
                    Long result = jedis.sadd(key.getBytes(), data);  
                    if (result != null && result != 0) {  
                        res++;  
                    }  
                }  
                if (res != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个<T>类型到set集合,如果key存在就在就最追加,整个set的key默认有效时间为1小时,成功返回1,失败或者没有受影响返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        
        public static <T> int setExSet(String key, T... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                int res = 0;  
                for (T t : value) {  
                    byte[] data = SerializeUtils.serialize(t);  
                    Long result = jedis.sadd(key.getBytes(), data);  
                    if (result != null && result != 0) {  
                        res++;  
                    }  
                }  
                jedis.expire(key, DEFAULT_SETEX_TIMEOUT);  
                if (res != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个<T>类型到set集合,如果key存在就在就最追加,整个set的key有效时间为timeOut,单位秒,成功返回1,失败或者没有受影响返回0 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        
        public static <T> int setExSet(String key, int timeOut, T... value) {  
            if (isValueNull(key, value)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                int res = 0;  
                for (T t : value) {  
                    byte[] data = SerializeUtils.serialize(t);  
                    Long result = jedis.sadd(key.getBytes(), data);  
                    if (result != null && result != 0) {  
                        res++;  
                    }  
                }  
                jedis.expire(key, timeOut);  
                if (res != 0) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 添加一个Map<K, V>集合,成功返回1,失败返回0 
         *  
         * @param key 
         * @param value 
         * @param timeout 
         * @return 
         */  
        public static <K, V> int setMap(String key, Map<K, V> value) {  
            if (value == null || key == null || "".equals(key)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                String data = JSON.toJSONString(value);  
                if (jedis.set(key, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个Map<K, V>集合,成功返回1,失败返回0,默认缓存时间为1小时,以本类的常量DEFAULT_SETEX_TIMEOUT为准 
         *  
         * @param key 
         * @param value 
         * @param timeout 
         * @return 
         */  
        public static <K, V> int setExMap(String key, Map<K, V> value) {  
            if (value == null || key == null || "".equals(key)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                String data = JSON.toJSONString(value);  
                if (jedis.setex(key, DEFAULT_SETEX_TIMEOUT, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 缓存一个Map<K, V>集合,成功返回1,失败返回0,缓存时间以timeout为准,单位秒 
         *  
         * @param key 
         * @param value 
         * @param timeout 
         * @return 
         */  
        public static <K, V> int setExMap(String key, Map<K, V> value, int timeout) {  
            if (value == null || key == null || "".equals(key)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                String data = JSON.toJSONString(value);  
                if (jedis.setex(key, timeout, data).equalsIgnoreCase("ok")) {  
                    return 1;  
                } else {  
                    return 0;  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获取一个字符串值 
         *  
         * @param key 
         * @return 
         */  
        public static String get(String key) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                return jedis.get(key);  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个指定类型的对象 
         *  
         * @param key 
         * @param value 
         * @return 
         */  
        public static <T> T get(String key, Class<T> clazz) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
      
                byte[] data = jedis.get(key.getBytes());  
                T result = (T) SerializeUtils.unserialize(data);  
                return result;  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个字符串集合,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 
         * 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 
         *  
         * @param key 
         * @param start 
         * @param end 
         * @return 
         */  
        public static List<String> getList(String key, long start, long end) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                List<String> result = jedis.lrange(key, start, end);  
                return result;  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个<T>类型的对象集合,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 
         * 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 
         *  
         * @param key 
         * @param start 
         * @param end 
         * @return 
         */  
        public static <T> List<T> getList(String key, long start, long end, Class<T> clazz) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                List<byte[]> lrange = jedis.lrange(key.getBytes(), start, end);  
                List<T> result = null;  
                if (lrange != null) {  
                    for (byte[] data : lrange) {  
                        if (result == null) {  
                            result = new ArrayList<T>();  
                        }  
                        result.add((T) SerializeUtils.unserialize(data));  
                    }  
                }  
                return result;  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得list中存了多少个值 
         *  
         * @return 
         */  
        public static long getListCount(String key) {  
            if (isValueNull(key)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                return jedis.llen(key);  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个List<T>的集合, 
         *  
         * @param key 
         *            键 
         * @param clazz 
         *            返回集合的类型 
         * @return 
         * @return 
         * @throws IOException 
         */  
        public static <T> T getList(String key, Class<?> clazz) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                byte[] data = jedis.get(key.getBytes()); 
    
                T result = (T) SerializeUtils.unserialize(data);
    
                return result;  
            }catch (Exception e){
                return null;
            }    finally {  
            
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个字符串set集合 
         *  
         * @param key 
         * @return 
         */  
        public static Set<String> getSet(String key) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Set<String> result = jedis.smembers(key);  
                return result;  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个字符串set集合 
         *  
         * @param key 
         * @return 
         */  
        public static <T> Set<T> getSet(String key, Class<T> clazz) {  
            if (isValueNull(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Set<byte[]> smembers = jedis.smembers(key.getBytes());  
                Set<T> result = null;  
                if (smembers != null) {  
                    for (byte[] data : smembers) {  
                        if (result == null) {  
                            result = new HashSet<T>();  
                        }  
                        result.add((T) SerializeUtils.unserialize(data));  
                    }  
                }  
                return result;  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得集合中存在多少个值 
         *  
         * @param key 
         * @return 
         */  
        public static long getSetCount(String key) {  
            if (isValueNull(key)) {  
                return 0;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                return jedis.scard(key);  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 获得一个Map<v,k>的集合 
         *  
         * @param key 
         * @param v 
         * @param k 
         * @return 
         */  
        public static <K, V> Map<K, V> getMap(String key, Class<K> k, Class<V> v) {  
            if (key == null || "".equals(key)) {  
                return null;  
            }  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                String data = jedis.get(key);  
                @SuppressWarnings("unchecked")  
                Map<K, V> result = (Map<K, V>) JSON.parseObject(data);  
                return result;  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        /** 
         * 删除一个值 
         *  
         * @param key 
         */  
        public static void del(String... key) {  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                for (int i = 0; i < key.length; i++) {  
                    jedis.del(key);  
                }  
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
        /** 
         * 删除所有值
         *  
         * @param key 
         */  
        public static void batchDel() {  
            Jedis jedis = null;  
            try {  
                jedis = JedisPoolUtil.getJedis();  
                Set<String> keys = jedis.keys("*");
                for (String pt : keys) {
                    jedis.del(pt);
                } 
            } finally {  
                JedisPoolUtil.closeJedis(jedis);  
            }  
        }  
      
        // --------------------------公用方法区------------------------------------  
        /** 
         * 检查值是否为null,如果为null返回true,不为null返回false 
         *  
         * @param obj 
         * @return 
         */  
        private static boolean isValueNull(Object... obj) {  
            for (int i = 0; i < obj.length; i++) {  
                if (obj[i] == null || "".equals(obj[i])) {  
                    return true;  
                }  
            }  
            return false;  
        } 
    }

    SerializeUtils

    package com.ly.zx.util.redis;
    
    import java.io.ByteArrayInputStream;  
    import java.io.ByteArrayOutputStream;  
    import java.io.ObjectInputStream;  
    import java.io.ObjectOutputStream;  
    
    public class SerializeUtils {
        /**  
         * 将对象进行序列化  
         * @param object  
         * @return  
         * @attention 传递对象
         */  
        public static byte[] serialize(Object object) {  
            ObjectOutputStream oos = null;  
            ByteArrayOutputStream baos = null;  
            try {  
                // 序列化  
                baos = new ByteArrayOutputStream();  
                oos = new ObjectOutputStream(baos);  
                oos.writeObject(object);  
                byte[] bytes = baos.toByteArray();  
                return bytes;  
            } catch (Exception e) {  
                throw new RuntimeException(e.getMessage(), e);  
            }  
        }  
          
        /**  
         * 反序列化  
         * @param bytes  
         * @return  
         * @attention 反序列化的操作  
         */  
        public static Object unserialize(byte[] bytes) {  
            ByteArrayInputStream bais = null;  
            try {  
                // 反序列化  
                bais = new ByteArrayInputStream(bytes);  
                ObjectInputStream ois = new ObjectInputStream(bais);  
                return ois.readObject();  
            } catch (Exception e) {  
                throw new RuntimeException(e.getMessage(), e);  
            }  
        }  
    }

     使用时直接调用公共方法就行

  • 相关阅读:
    HDU 4825 字典树
    HDU4287 字典树
    HDU 3973 AC's String 字符串哈希
    HDU5296 Annoying problem(LCA)
    Gym 100712L Alternating Strings II(单调队列)
    数据结构专题
    HDU5033 Building(单调栈)
    HDU2888 Check Corners(二维RMQ)
    HDU 4123 Bob’s Race(RMQ)
    HDU3530 Subsequence(单调队列)
  • 原文地址:https://www.cnblogs.com/sho560/p/8607825.html
Copyright © 2011-2022 走看看