Redisクライアント-Jedisの使用

7502 ワード

Java言語ベースのRedisクライアントであるJedisの使用について説明します.Jedisの概要、Jedisの取得、Jedisの直接接続、Jedis接続プール、および両者の比較の選択が含まれます.

Jedisの概要


JedisはRedisの公式の第一選択のJava言語に基づくクライアント開発パッケージである.Jedisは強力で、Redis 2.8と完全なRedisコマンドを提供しています.x, 3.x.xおよび以上のバージョンは完全に互換性があります.また、使いやすく、Java言語の優先クライアントであることは間違いありません.

Jedisの取得


Jedisを取得するにはhttp://github.com/xetorthio/jedis/releases最新のバージョンをダウンロードします.またはMaven依存を導入します.
     <dependency>
         <groupId>redis.clientsgroupId>
         <artifactId>jedisartifactId>
         <version>3.0.1version>
         <type>jartype>
         <scope>compilescope>
     dependency>

Jedis直結


Jedis直接接続では、Redisノードとの通信を担当するJedisオブジェクトを生成する必要があります.
Jedis jedis = new Jedis("127.0.0.1",6379);

次に、基本的な操作を行います.
  • string
  • jedis.set("hello","world");
    jedis.get("hello");
    jedis.incr("counter");
  • hash
  • jedis.hset("myhash","f1","v1");
    jedis.hset("myhash","f2","v2");
    jedis.hgetAll("myhash");
  • list
  • jedis.rpush("mylist","1");
    jedis.rpush("mylist","2");
    jedis.rpush("mylist","3");
    jedis.lrange("mylist",0,-1);
  • set
  • jedis.sadd("myset","a");
    jedis.sadd("myset","b");
    jedis.sadd("myset","a");
    jedis.smember("myset");
  • zset
  • jedis.zadd("myzset",99,"alan");
    jedis.zadd("myzset",88,"paul");
    jedis.zadd("myzset",77,"077");
    jedis.zrangeWithScores("myzset",0,-1);

    Jedis接続プール


    接続プールとは?類比を挙げると、スレッドプールはスレッドを統一管理しやすい容器の中に置くので、接続プールは接続を1つの容器の中に置くことで、接続の管理と使用を便利にして、システムの資源のオーバーヘッドと時間を節約する効果を達成します.
    接続プールがない場合、実際のアプリケーション開発では、JedisリクエストのたびにJedisオブジェクトの生成、Jedis実行コマンドの生成、Jedisの実行結果の戻し、Jedis接続のクローズなどのステップを経なければなりません.Jedisオブジェクトを新規作成し、データベースを新規に接続して開くことは、リソースが消費され、時間がかかる作業です.このようなデータベース操作が頻繁に発生すると、システムのパフォーマンスが急激に低下し、システムがクラッシュする可能性があります.プール化テクノロジーを使用すると、接続をオブジェクトとしてコンテナ(接続プール)に格納し、接続プールが確立されると、これらの接続は共有され、システムリソースと時間を大幅に節約します.これがJedis接続プールです.スレッドプールを前に知っていれば、ここで見るとかなり楽に書けると思います.
    Jedis接続プールの使用には、主に次のステップがあります.接続プールを作成し、接続プールにJedisオブジェクトを借り、Jedis実行コマンドを実行し、実行結果を返し、Jedisオブジェクトを接続プールに返します.具体的なコードは以下の通りです.
    Jedis接続プールを作成して初期化します.
    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    JedisPool jedisPool = new JedisPool(poolConfig,"127.0.0.1",6739);

    JedisPoolのほとんどの構成がGenericObjectPoolConfigで完了していることがわかります.GenericObjectPoolConfigパラメータの説明は次の表の通りです.
    パラメータ
    パラメータの説明
    maxTotal
    最大接続数、デフォルトは8です.
    maxIdle
    最大アイドル接続数、デフォルトは8です.
    minIdle
    最小アイドル接続数、デフォルトは0です.
    maxWaitMillis
    borrowがjedisインスタンスを導入した場合、最大の待ち時間は、待ち時間を超えるとJedisConnectionExceptionから直接放出されます.
    testOnBorrow
    borrowのjedisインスタンスの場合、接続可用性(ping()操作を事前にチェックするかどうか.trueの場合、得られたjedisインスタンスはいずれも使用可能である.デフォルトはfalseです.
    blockWhenExhausted
    接続が切れたときにブロックされるかどうか、falseは異常を報告し、tureはタイムアウトまでブロックされ、デフォルトtrueです.
    testOnReturn
    jedisインスタンスをreturnする場合、接続の可用性(ping())を確認するかどうか、デフォルトはfalseです.
    testWhileIdle
    trueの場合、idle object evitorスレッドがidle objectをスキャンしていることを示し、validateが失敗するとpoolからdropが削除されます.
    これはtimeBetweenEveictionRunsMillisが0より大きい場合にのみ意味がある.
    minEvictableIdleTimeMillis
    オブジェクトが少なくともidle状態にとどまる最短時間を表し、idle object evitorによってスキャンされて駆逐される.これはtimeBetweenEveictionRunsMillisが0より大きい場合にのみ意味がある.
    JedisPoolConfigではデフォルトで60000に設定されています.
    timeBetweenEvictionRunsMillis
     
    idle object evitorの2回のスキャン間にsleepが必要なミリ秒数を示し、デフォルトは30000に設定されています.
    Jedis接続プールを作成して初期化すると、Jedis接続プールからJedisオブジェクトを取得して操作できます.
    Jedis jedis = null;
    try{
        //1.      jedis  
        jedis = jedisPool.getResource();
        //2.    
        jedis.set("hello","world");
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        if(jedis != null){
            //     
            jedis.close();
        }
    }

    選択方法


    Jedis直接接続とJedis接続プールの使用はそれぞれ長さがあり、生産環境の必要に応じて適宜に行うことができる.
    少量の接続であり、各接続時間が長い場合は、Jedis直結を使用するのに適しています.
    頻繁な接続の場合はJedis接続プールを使用します.
     
    メリット
    欠点
    直結
  • 簡単便利
  • 少量の長期接続用シーン
  • 新規/クローズ毎のTCPオーバーヘッドが大きい
  • リソースが制御できず、接続漏れの可能性がある
  • Jedisオブジェクトスレッド非安全
  • 接続プール
  • Jedisは予め生成する、コストを低減して
  • を使用する.
  • 接続プールの形態によるリソースの保護および制御
  • 直結に対して、使用は相対的に面倒で、特に資源の管理の上で多くのパラメータを必要として保証して、いったん計画が合理的でないと問題が発生する