Jedis-Jedis接続プール(最適化)

1. Jedis(JavaクライアントがRedisを操作するためのツールクラス)の概要

   Jedisは、Redisが公式に推奨するJava接続開発ツールですコマンドの使用に加えて、基本的に主流の言語はクライアントサポートを備えています。メインのJavaクライアントはJedisです。Jedisは完全なRedisコマンドを提供しますが、Redissonはより多くの分散コンテナー実装を備えています。

   JavaオペレーションRedisツールクラス:Jedis

Jedis接続プールは
   、apache-commons pool2に基づくjedis接続プールを使用します。接続プールオブジェクトを構築するときは、プールオブジェクトの構成オブジェクトとJedisPoolConfig(GenericObjectPoolConfigから継承)を提供する必要があります。この構成オブジェクトを使用して、接続プールの関連パラメーター(接続の最大数、空の最大数など)を構成できます。

   j 2つのjarパッケージ
ここに画像の説明を挿入

1.1 Redis操作へのJedis接続のテスト

public class TestJedis {
    
    
    @Test
    public void test01(){
    
    
        //1:创建一个Jedis对象   创建一个连接,参1 ip地址(Redis服务器的ip地址) 参2 端口
        Jedis jedis = new Jedis("localhost", 6379);
        //2:执行Redis的指令(set指令)
        //写入数据
        jedis.set("name","[email protected]");//添加 string-string
        jedis.sadd("set","hello","[email protected]","Welcome to use");//添加string-set集合类型
        //读取数据
        System.out.println(jedis.get("name"));
        System.out.println(jedis.smembers("set"));
        //关闭连接
        jedis.close();
    }
}

演算結果:

[email protected]
[こんにちは、ようこそ、strive_gf @ 163.com]

2. Jedis接続プールの原則(時間のスペースはコレクションに相当)

接続プールの利点:

接続の頻繁な作成と破棄は非常にパフォーマンスを消費するため(TCP / IP 3ウェイハンドシェイクと4つのウェーブは非常にパフォーマンスを消費します)、接続プールは、頻繁なリソースの割り当てと解放によって引き起こされるパフォーマンスの消費の問題を解決します。
メソッド:コレクションを作成して複数の接続を初期化し、必要に応じてgetConnection()メソッドを呼び出して接続を申請し、使用後にclose()を呼び出して接続プールに戻します。(ここでのclose()は、接続を閉じるためではなく、接続プールに戻すためのものです)

2.1 Jedis接続プールの実装(ハードコード)

ハードコードされた
構成パラメーターはJavaコードで記述され、クラスにコンパイルされます。構成を変更するには、将来Javaコードを変更する必要があります

public class TestJedisPool {
    
    
    @Test
    public void test01(){
    
    

//        1:创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大链接数
        config.setMaxTotal(20);
        //设置空闲连接数
        config.setMaxIdle(10);
//        2:创建连接池 参1:Redis服务器ip地址  参2:端口号
        JedisPool pool = new JedisPool(config, "localhost", 6379);
//        3:从连接池中获取一个连接
        Jedis jedis = pool.getResource();//获取一个连接
//        4:执行Redis执行  Map<String,String>   set   get
        jedis.set("name","JedisPool连接池");
        String value = jedis.get("name");
        System.out.println(value);
//        5:释放连接
        jedis.close();
    }
}

演算結果:

JedisPool接続プール



2.2 Jedis接続プールの最適化(ツールクラス呼び出しとして記述)

プロジェクトでは、構成ファイルを使用してパラメーターを構成します。将来、Javaコードを変更する必要はありません。ファイル内のパラメーターを直接変更します。

  1. テストクラス(ビジネスロジック)を書く
//Jedis连接池优化(JedisPool优化)
public class TestJedisUtils {
    
    
    @Test
    public void test01(){
    
    
        //1:从连接池获取连接
        Jedis jedis = JedisUtils.getRedis();
        //2: 进行读写操作
        jedis.set("name","JedisPool连接池优化JedisUtils");
        
        String value = jedis.get("name");
        System.out.println(value);
        //3: 关闭连接
        JedisUtils.close(jedis);
    }
}
  1. パラメータ変数を保存するプロパティファイルを作成する(jedis.properties)
    //プロパティファイルには、キーと値のペアの形式でデータが含まれ、特別な読み取りツールのPropertiesクラスを使用して読み取ることができます。
maxTotal=50
maxIdle=15
url=localhost
port=6379
  1. jedis接続プール作成するためのツールクラス(.properties内のファイルを読み取る)

  .propertiesファイルを読み取る方法:

  • クラスローダーを使用して最初にストリームをロードしてから、Propertiesクラスを使用してを読み取ることができます
  • ResourceBundleを使用して.proptiesを読み取ることもできます

3.1 クラスローダーを使用してストリームにロードし、次にPropertiesクラスを使用して読み取ります

public class JedisUtils {
    
    
    //单例模式 静态代码块只执行一次,因为创建会很消耗性能
    private static JedisPool pool;
    //静态代码在项目中,如果被使用只会加载一次
    static {
    
    

        //读src下的文件用类加载器的方式  - 类加载器去加载成流,再使用Properties类来读
        InputStream inputStream= JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");

        //.properties文件专门的读取工具
        Properties properties = new Properties();
        try {
    
    
            //将流中的数据读成map
            properties.load(inputStream);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        // 1:创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大链接数
        config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
        //设置空闲连接数  "3"
        config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
        //2:创建连接池
         pool = new JedisPool(config, properties.getProperty("url"), Integer.parseInt(properties.getProperty("port")));
    }
    public static Jedis getRedis() {
    
    
//        3:从连接池中获取一个连接
        Jedis jedis = pool.getResource();//获取一个连接
        return jedis;
    }

    public static void close(Jedis jedis) {
    
    
        if(jedis!=null){
    
    
            jedis.close();
        }
    }
}

3.2 ResourceBundleを使用して.proptiesを読み取る

public class JedisUtils {
    
    
    private static JedisPool pool = null;
    //1:创建一个连接池
    static{
    
    
        //1.1 解析properties文件
        ResourceBundle bundle = ResourceBundle.getBundle("jedis");
        //获取参数
        String maxTotal = bundle.getString("maxTotal");
        String maxIdle = bundle.getString("maxIdle");
        String url = bundle.getString("url");
        String port = bundle.getString("port");

        //1.2创建连接池
        //1:创建连接池的配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //1.1 设置最大连接数
        config.setMaxTotal(Integer.parseInt(maxTotal));
        //1.2 设置空闲连接数
        config.setMaxIdle(Integer.parseInt(maxIdle));

        //2:创建连接池
         pool = new JedisPool(config, url, Integer.parseInt(port));
    }

    //2:对外提供一个获取连接的方法
    public static Jedis getJedis(){
    
    
        return  pool.getResource();
    }

    //3:提供释放资源的方法
    public static void close(Jedis jedis){
    
    
        if(jedis != null) {
    
    
            jedis.close();
        }
    }
}

演算結果:

JedisPool接続プールの最適化JedisUtils

おすすめ

転載: blog.csdn.net/qq_40542534/article/details/108730660