Redisクライアント-Jedisの使用
7502 ワード
Java言語ベースのRedisクライアントであるJedisの使用について説明します.Jedisの概要、Jedisの取得、Jedisの直接接続、Jedis接続プール、および両者の比較の選択が含まれます.
JedisはRedisの公式の第一選択のJava言語に基づくクライアント開発パッケージである.Jedisは強力で、Redis 2.8と完全なRedisコマンドを提供しています.x, 3.x.xおよび以上のバージョンは完全に互換性があります.また、使いやすく、Java言語の優先クライアントであることは間違いありません.
Jedisを取得するにはhttp://github.com/xetorthio/jedis/releases最新のバージョンをダウンロードします.またはMaven依存を導入します.
Jedis直接接続では、Redisノードとの通信を担当するJedisオブジェクトを生成する必要があります.
次に、基本的な操作を行います. string hash list set zset
接続プールとは?類比を挙げると、スレッドプールはスレッドを統一管理しやすい容器の中に置くので、接続プールは接続を1つの容器の中に置くことで、接続の管理と使用を便利にして、システムの資源のオーバーヘッドと時間を節約する効果を達成します.
接続プールがない場合、実際のアプリケーション開発では、JedisリクエストのたびにJedisオブジェクトの生成、Jedis実行コマンドの生成、Jedisの実行結果の戻し、Jedis接続のクローズなどのステップを経なければなりません.Jedisオブジェクトを新規作成し、データベースを新規に接続して開くことは、リソースが消費され、時間がかかる作業です.このようなデータベース操作が頻繁に発生すると、システムのパフォーマンスが急激に低下し、システムがクラッシュする可能性があります.プール化テクノロジーを使用すると、接続をオブジェクトとしてコンテナ(接続プール)に格納し、接続プールが確立されると、これらの接続は共有され、システムリソースと時間を大幅に節約します.これがJedis接続プールです.スレッドプールを前に知っていれば、ここで見るとかなり楽に書けると思います.
Jedis接続プールの使用には、主に次のステップがあります.接続プールを作成し、接続プールにJedisオブジェクトを借り、Jedis実行コマンドを実行し、実行結果を返し、Jedisオブジェクトを接続プールに返します.具体的なコードは以下の通りです.
Jedis接続プールを作成して初期化します.
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接続プールの使用はそれぞれ長さがあり、生産環境の必要に応じて適宜に行うことができる.
少量の接続であり、各接続時間が長い場合は、Jedis直結を使用するのに適しています.
頻繁な接続の場合はJedis接続プールを使用します.
メリット
欠点
直結簡単便利 少量の長期接続用シーン 新規/クローズ毎のTCPオーバーヘッドが大きい リソースが制御できず、接続漏れの可能性がある 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);
次に、基本的な操作を行います.
jedis.set("hello","world");
jedis.get("hello");
jedis.incr("counter");
jedis.hset("myhash","f1","v1");
jedis.hset("myhash","f2","v2");
jedis.hgetAll("myhash");
jedis.rpush("mylist","1");
jedis.rpush("mylist","2");
jedis.rpush("mylist","3");
jedis.lrange("mylist",0,-1);
jedis.sadd("myset","a");
jedis.sadd("myset","b");
jedis.sadd("myset","a");
jedis.smember("myset");
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接続プールを使用します.
メリット
欠点
直結