zoukankan      html  css  js  c++  java
  • redis工具类 ----RedisPoolUtil

    这里介绍一下,这个工具类不是在分布式环境下来用的,就是我们平常使用的,单机状况下,为什么博主开头要这样强调呢?因为,之前见网上有些博友有这样封装的,也有RedisShardedPoolUtil 封装的 ,刚开始不是很明白,现在知道了,后者是在分布式的场景下使用的。好啦。现在让我们来code了~~~~

    首先来大致介绍下吧,redis的工具类很简单,就是先创建一个redis连接池(引入第三方的jar包就行),像数据库连接池一样,然后,需要的参数写在配置文件中,创建连接池这个类  RedisPool.java   需要两个方法,一个从连接池得到资源redis,一个是放回redis资源。

    然后,再写一个专门操控redis的  ‘增删改查’  方法。这就可以。 不多说,老规矩,开箱即用。上代码!!!

    pom.xml
    <dependencies>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
            <!--加速开发的工具,可以省略getset和日志类,只需要注解就可以-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.6</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.5</version>
            </dependency>
    
    
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.2</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.2</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.logback-extensions</groupId>
                <artifactId>logback-ext-spring</artifactId>
                <version>0.1.1</version>
            </dependency>
        </dependencies>
    View Code

    RedisPool.java
    这里强调一下,redis的pom是2.9 所以回收资源是close方法,之前的pool.returnBrokenResource(jedis);
    和pool.returnResource(jedis);已经被官方弃用了。这点注意。
    import lombok.extern.slf4j.Slf4j;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    /**
     * Created by 敲代码的卡卡罗特
     */
    @Slf4j
    public class RedisPool {
        private static JedisPool pool;//jedis连接池
        private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20")); //最大连接数
        private static Integer maxIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle","20"));//在jedispool中最大的idle状态(空闲的)的jedis实例的个数
        private static Integer minIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","20"));//在jedispool中最小的idle状态(空闲的)的jedis实例的个数
    
        private static Boolean testOnBorrow = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));//在borrow一个jedis实例的时候,是否要进行验证操作,如果赋值true。则得到的jedis实例肯定是可以用的。
        private static Boolean testOnReturn = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));//在return一个jedis实例的时候,是否要进行验证操作,如果赋值true。则放回jedispool的jedis实例肯定是可以用的。
    
        private static String redisIp = PropertiesUtil.getProperty("redis1.ip");
        private static Integer redisPort = Integer.parseInt(PropertiesUtil.getProperty("redis1.port"));
    
    
        private static void initPool(){
            JedisPoolConfig config = new JedisPoolConfig();
    
            config.setMaxTotal(maxTotal);
            config.setMaxIdle(maxIdle);
            config.setMinIdle(minIdle);
    
            config.setTestOnBorrow(testOnBorrow);
            config.setTestOnReturn(testOnReturn);
    
            config.setBlockWhenExhausted(true);//连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。默认为true。
    
            pool = new JedisPool(config,redisIp,redisPort,1000*2);
        }
    
        static{
            initPool();
        }
    
        public static Jedis getJedis(){
            return pool.getResource();
        }
    
    
        public static void close(Jedis jedis){
            try {
                if (jedis != null) {
                    jedis.close();
                }
            } catch (Exception e) {
                log.error("return redis resource exception", e);
            }
        }
    
    
        public static void main(String[] args) {
            Jedis jedis = pool.getResource();
            jedis.set("lzh","liuzhonghua");
            close(jedis);
    
            pool.destroy();//临时调用,销毁连接池中的所有连接
            System.out.println("program is end");
    
    
        }
    
    
    
    
    
    
    
    }
    View Code
    
    
    RedisPoolUtil.java   代码很简单  方法就不一一介绍了。看不懂的留言问我
    import lombok.extern.slf4j.Slf4j;
    import redis.clients.jedis.Jedis;
    
    /**
     * Created by 敲代码的卡卡罗特
     */
    @Slf4j
    public class RedisPoolUtil {
    
    
        /**
         * 设置key的有效期,单位是秒
         * @param key
         * @param exTime
         * @return
         */
        public static Long expire(String key,int exTime){
            Jedis jedis = null;
            Long result = null;
            try {
                jedis = RedisPool.getJedis();
                result = jedis.expire(key,exTime);
            } catch (Exception e) {
                log.error("expire key:{} error",key,e);
                RedisPool.close(jedis);
                return result;
            }
            RedisPool.close(jedis);
            return result;
        }
    
        //exTime的单位是秒
        public static String setEx(String key,String value,int exTime){
            Jedis jedis = null;
            String result = null;
            try {
                jedis = RedisPool.getJedis();
                result = jedis.setex(key,exTime,value);
            } catch (Exception e) {
                log.error("setex key:{} value:{} error",key,value,e);
                RedisPool.close(jedis);
                return result;
            }
            RedisPool.close(jedis);
            return result;
        }
    
        public static String set(String key,String value){
            Jedis jedis = null;
            String result = null;
    
            try {
                jedis = RedisPool.getJedis();
                result = jedis.set(key,value);
            } catch (Exception e) {
                log.error("set key:{} value:{} error",key,value,e);
                RedisPool.close(jedis);
                return result;
            }
            RedisPool.close(jedis);
            return result;
        }
    
        public static String get(String key){
            Jedis jedis = null;
            String result = null;
            try {
                jedis = RedisPool.getJedis();
                result = jedis.get(key);
            } catch (Exception e) {
                log.error("get key:{} error",key,e);
                RedisPool.close(jedis);
                return result;
            }
            RedisPool.close(jedis);
            return result;
        }
    
        public static Long del(String key){
            Jedis jedis = null;
            Long result = null;
            try {
                jedis = RedisPool.getJedis();
                result = jedis.del(key);
            } catch (Exception e) {
                log.error("del key:{} error",key,e);
                RedisPool.close(jedis);
                return result;
            }
            RedisPool.close(jedis);
            return result;
        }
    
        public static void main(String[] args) {
            Jedis jedis = RedisPool.getJedis();
    
            jedis.setex("name",100,"lzh");
    
            System.out.println("end");
    
    
        }
    
    
    }
    View Code
    再配上读取配置文件的工具类  PropertiesUtil  需要注意的是,这个文件名写死了,就从这一个文件名中读取参数。你也可以再封装一下。
    我这里就不麻烦了。
    PropertiesUtil.java
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Properties;
    
    /**
     * Created by 敲代码的卡卡罗特
     */
    @Slf4j
    public class PropertiesUtil {
    
    
        private static Properties props;
    
        static {
            String fileName = "mmall.properties";
            props = new Properties();
            try {
                props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8"));
            } catch (IOException e) {
                log.error("配置文件读取异常",e);
            }
        }
    
        public static String getProperty(String key){
            String value = props.getProperty(key.trim());
            if(StringUtils.isBlank(value)){
                return null;
            }
            return value.trim();
        }
    
        public static String getProperty(String key,String defaultValue){
    
            String value = props.getProperty(key.trim());
            if(StringUtils.isBlank(value)){
                value = defaultValue;
            }
            return value.trim();
        }
    
        public static void main(String[] arg){
            System.out.println(PropertiesUtil.getProperty("redis.port"));
        }
    
    }
    View Code

      mmall.properties

    #redis config start
    
    redis1.ip=127.0.0.1
    redis1.port=6379
    
    
    ##Tips:以上redis1和redis2的ip和port改成你自己的哟
    
    #最大连接数
    redis.max.total=20
    
    #最大空闲数
    redis.max.idle=10
    
    #最小空闲数
    redis.min.idle=2
    
    #从jedis连接池获取连接时,校验并返回可用的连接
    redis.test.borrow=true
    
    #把连接放回jedis连接池时,校验并返回可用的连接
    redis.test.return=false
    
    
    #redis config end
    View Code
    ok,大功告成
     









  • 相关阅读:
    ELM学习
    《进化》从孤胆极客到高效团队
    《人件》《PeopleWare》 【美】Tom DeMarco TimothyLister 著 肖然 张逸 滕云 译
    《进化》从孤胆极客到高效团队---Notes1
    大数据第一部分LInux学习Note1
    C#Windows窗体初学
    C#初学笔记(Windows编程的基本概念)
    C#学习2017-9-26(读取文本文件和读取二进制文件)Notes9
    C#学习2017-9-26Notes8(文件和流,FileStream类)
    C#学习笔记Notes8(接口,接口实现,程序集,命名空间,using)
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/8734340.html
Copyright © 2011-2022 走看看