• Jedis(Java+Redis) Pool的使用


    今天试了一下Jedis里连接池JedisPool的的使用。代码如下:

    package com.myapp.jedis.pooldemo;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    /**
     * Created by baidu on 16/10/18.
     */
    public class TestPool {
        private static JedisPool pool = null;
    
        public static JedisPool getPool() {
            if (pool == null) {
                JedisPoolConfig config = new JedisPoolConfig();
                config.setMaxTotal(500);
                config.setMaxIdle(5);
                config.setMaxWaitMillis(1000*10);
                //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
                config.setTestOnBorrow(true);
                //new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
                pool = new JedisPool(config, "[ip]", 8379, 10000, "[auth]");
    
            }
            return pool;
        }
    
        public synchronized static Jedis getResource() {
            if (pool == null) {
                pool = getPool();
            }
            return pool.getResource();
        }
    
        // 返还到连接池
        // Deprecated
        // 换成用完之后, redis.close()
        /*
        public static void returnResource(Jedis redis) {
            if (redis != null) {
                pool.returnResource(redis);
            }
        }
        */
    
        public static void main(String[] args) {
            Jedis redis = null;
            int loop = 1;
            while (loop < 20) {
                try {
                    long start = System.currentTimeMillis();
                    redis = getResource();
                    redis.set("k1", "v1");
                    String ret = redis.get("k1");
                    long end = System.currentTimeMillis();
                    System.out.printf("Get ret from redis: %s with %d millis
    ", ret, end-start);
                } finally {
                    if (redis != null) {
                        redis.close();
                    }
                }
                loop++;
            }
        }
    
    }

    其中,有个函数returnResource已经deprecated了,现在Jedis的close方法重写了,用Jedis.close来释放资源。

    跑了20次,运行结果如下:

    Get ret from redis: v1 with 564 millis
    Get ret from redis: v1 with 235 millis
    Get ret from redis: v1 with 225 millis
    Get ret from redis: v1 with 214 millis
    Get ret from redis: v1 with 210 millis
    Get ret from redis: v1 with 232 millis
    Get ret from redis: v1 with 209 millis
    Get ret from redis: v1 with 211 millis
    Get ret from redis: v1 with 239 millis
    Get ret from redis: v1 with 207 millis
    Get ret from redis: v1 with 215 millis
    Get ret from redis: v1 with 223 millis
    Get ret from redis: v1 with 291 millis
    Get ret from redis: v1 with 220 millis
    Get ret from redis: v1 with 214 millis
    Get ret from redis: v1 with 219 millis
    Get ret from redis: v1 with 257 millis
    Get ret from redis: v1 with 214 millis
    Get ret from redis: v1 with 211 millis
    
    Process finished with exit code 0

    可以看出,第一次500多毫秒,之后都是200多毫秒,速度有提高。

  • 相关阅读:
    ArrayList 和 Vector 的区别是什么?
    事务
    多态的特点?有什么优点?
    子父类出现后,类中的成员都有了哪些特点:
    线程与进程的区别
    1.Go语言-变量,常量
    scikit-learn TF-IDF
    Django + Channels + Celery 实时更新日志
    pipenv包管理工具使用
    pycharm实现本地与远程服务器django项目代码同步
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5975536.html
Copyright © 2020-2023  润新知