Jedis接続プールのエントリーレベルでの使用
4751 ワード
Jedis接続プールの操作手順は次のとおりです.
a.Jedisインスタンスを取得するにはJedisPoolから取得する必要がある.
b.Jedisインスタンスを使い切るにはJedisPoolに返却する必要がある.
c.Jedisが使用中にエラーが発生した場合、JedisPoolに返却する必要があります.
実行結果:redis
redisクライアントget studyによる結果もredisであり、以下に示す.
コードの説明:
a.jedisインスタンスを取得する場合、実際には2つのエラーが発生する可能性があります.一つはpoolです.getResource()は、使用可能なjedisインスタンスが得られません.もう一つはjedisですset/getでエラーが発生しても異常が放出されます.
区分を実現するために、instanceがnullであるかどうかによって実現され、空であればinstanceが初期化されていないことを証明し、poolにreturnを与える必要はありません.instanceがnullでない場合、poolに返却する必要があることを証明します.
b.instanceエラーが発生した場合、returnBrokenResourceを呼び出してpoolに返却する必要があります.そうしないと、次回getResourceで得られるinstanceのバッファにデータが存在し、問題が発生する可能性があります.
JedisPoolの構成JedisPoolConfigの詳細:
JedisPoolの構成パラメータは実際の応用ニーズ、ソフト・ハードウェア能力に大きく依存している.JedisPoolの構成パラメータの大部分はJedisPoolConfigの対応する項によって与えられる.
maxActive:poolに割り当てられるjedisインスタンスの数を制御し、pool.getResource()を取得します.付与値が-1の場合、制限はありません.poolがmaxActive個jedisインスタンスを割り当てた場合、poolの状態はexhaustedになります.
maxIdle:poolがidle(アイドル)のjedisインスタンスを最大数個制御します.
whenExhaustedAction:poolのjedisインスタンスがallocatedで完了した場合、poolが取る操作を示します.デフォルトは3種類あります.
WHEN_EXHAUSTED_FAIL:jedisインスタンスがない場合、NoSuchElementExceptionを直接放出します.
WHEN_EXHAUSTED_BLOCK:ブロックされているか、maxWaitに達したときにJedisConnectionExceptionを投げ出すことを示します.
WHEN_EXHAUSTED_GROW:jedisインスタンスを新規作成することを表します.つまり、設定したmaxActiveは役に立たないと言います.
maxWait:borrowのjedisインスタンスの場合、最大の待機時間を表し、待機時間を超えた場合、JedisConnectionExceptionを直接投げ出す.
testOnBorrow:borrowのjedisインスタンスの場合、alidate操作を事前に行うかどうか.trueの場合、得られたjedisインスタンスはいずれも使用可能である.
testOnReturn:returnがpoolに与えられた場合、validate操作を事前に行うかどうか.
testWhileIdle:trueの場合、idle object evitorスレッドがidle objectをスキャンし、validateが失敗するとpoolからdropされます.これはtimeBetweenEveictionRunsMillisが0より大きい場合にのみ意味がある.
timeBetweenEveictionRunsMillis:idle object evitorの2回のスキャンの間にsleepが必要なミリ秒数を示します.
numTestsPerEveictionRun:idle object evitorがスキャンするたびに最も多くのオブジェクト数を表します.
minEveictableIdleTimeMillis:1つのオブジェクトがidle状態の最短時間にとどまることを示し、idle object evitorにスキャンされて駆逐される.これはtimeBetweenEveictionRunsMillisが0より大きい場合にのみ意味がある.
softMinEveictableIdleTimeMillis:minEveictableIdleTimeMillisに加えて、少なくともminIdle個のオブジェクトがpoolに入っています.-1の場合、evictedはidle timeに基づいてオブジェクトを駆逐しません.m i n v e v i c tableIdleTimeMillis>0の場合、この設定は意味がなく、timeBetweenEveictionRunsMillisが0より大きい場合にのみ意味があります.
lifo:borrowObjectがオブジェクトを返す場合、DEFAULT_を使用します.LIFO(last in first out、すなわちcacheのような最も頻繁に使用されるキュー)は、FalseであればFIFOキューを表す.
JedisPoolConfigのパラメータのデフォルト設定は次のとおりです.
PS:上記の例はjedis-2.0.0に基づく.jar、commons-pool-1.6.jarが実行されます.
記事の出典:http://blog.sina.com.cn/s/blog_67196ddc0101dkz2.html
a.Jedisインスタンスを取得するにはJedisPoolから取得する必要がある.
b.Jedisインスタンスを使い切るにはJedisPoolに返却する必要がある.
c.Jedisが使用中にエラーが発生した場合、JedisPoolに返却する必要があります.
package com.bijian.study;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisAPI {
private static JedisPool pool = null;
public static JedisPool getPool() {
if (pool == null) {
JedisPoolConfig config = new JedisPoolConfig();
// pool jedis , pool.getResource() ;
// -1, ; pool maxActive jedis , pool exhausted( )。
config.setMaxActive(500);
// pool idle( ) jedis 。
config.setMaxIdle(5);
// borrow( ) jedis , , , JedisConnectionException;
config.setMaxWait(1000 * 100);
// borrow jedis , validate ; true, jedis ;
config.setTestOnBorrow(true);
pool = new JedisPool(config, "192.168.128.129", 6379);
}
return pool;
}
public static void returnResource(JedisPool pool, Jedis redis) {
if (redis != null) {
pool.returnResource(redis);
}
}
public static String get(String key) {
String value = null;
JedisPool pool = null;
Jedis jedis = null;
try {
pool = getPool();
jedis = pool.getResource();
value = jedis.get(key);
} catch (Exception e) {
// redis
pool.returnBrokenResource(jedis);
e.printStackTrace();
} finally {
//
returnResource(pool, jedis);
}
return value;
}
public static void main(String[] args) {
String result = RedisAPI.get("study");
System.out.println(result);
}
}
実行結果:redis
redisクライアントget studyによる結果もredisであり、以下に示す.
[root@localhost bin]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> get study
"redis"
127.0.0.1:6379>
コードの説明:
a.jedisインスタンスを取得する場合、実際には2つのエラーが発生する可能性があります.一つはpoolです.getResource()は、使用可能なjedisインスタンスが得られません.もう一つはjedisですset/getでエラーが発生しても異常が放出されます.
区分を実現するために、instanceがnullであるかどうかによって実現され、空であればinstanceが初期化されていないことを証明し、poolにreturnを与える必要はありません.instanceがnullでない場合、poolに返却する必要があることを証明します.
b.instanceエラーが発生した場合、returnBrokenResourceを呼び出してpoolに返却する必要があります.そうしないと、次回getResourceで得られるinstanceのバッファにデータが存在し、問題が発生する可能性があります.
JedisPoolの構成JedisPoolConfigの詳細:
JedisPoolの構成パラメータは実際の応用ニーズ、ソフト・ハードウェア能力に大きく依存している.JedisPoolの構成パラメータの大部分はJedisPoolConfigの対応する項によって与えられる.
maxActive:poolに割り当てられるjedisインスタンスの数を制御し、pool.getResource()を取得します.付与値が-1の場合、制限はありません.poolがmaxActive個jedisインスタンスを割り当てた場合、poolの状態はexhaustedになります.
maxIdle:poolがidle(アイドル)のjedisインスタンスを最大数個制御します.
whenExhaustedAction:poolのjedisインスタンスがallocatedで完了した場合、poolが取る操作を示します.デフォルトは3種類あります.
WHEN_EXHAUSTED_FAIL:jedisインスタンスがない場合、NoSuchElementExceptionを直接放出します.
WHEN_EXHAUSTED_BLOCK:ブロックされているか、maxWaitに達したときにJedisConnectionExceptionを投げ出すことを示します.
WHEN_EXHAUSTED_GROW:jedisインスタンスを新規作成することを表します.つまり、設定したmaxActiveは役に立たないと言います.
maxWait:borrowのjedisインスタンスの場合、最大の待機時間を表し、待機時間を超えた場合、JedisConnectionExceptionを直接投げ出す.
testOnBorrow:borrowのjedisインスタンスの場合、alidate操作を事前に行うかどうか.trueの場合、得られたjedisインスタンスはいずれも使用可能である.
testOnReturn:returnがpoolに与えられた場合、validate操作を事前に行うかどうか.
testWhileIdle:trueの場合、idle object evitorスレッドがidle objectをスキャンし、validateが失敗するとpoolからdropされます.これはtimeBetweenEveictionRunsMillisが0より大きい場合にのみ意味がある.
timeBetweenEveictionRunsMillis:idle object evitorの2回のスキャンの間にsleepが必要なミリ秒数を示します.
numTestsPerEveictionRun:idle object evitorがスキャンするたびに最も多くのオブジェクト数を表します.
minEveictableIdleTimeMillis:1つのオブジェクトがidle状態の最短時間にとどまることを示し、idle object evitorにスキャンされて駆逐される.これはtimeBetweenEveictionRunsMillisが0より大きい場合にのみ意味がある.
softMinEveictableIdleTimeMillis:minEveictableIdleTimeMillisに加えて、少なくともminIdle個のオブジェクトがpoolに入っています.-1の場合、evictedはidle timeに基づいてオブジェクトを駆逐しません.m i n v e v i c tableIdleTimeMillis>0の場合、この設定は意味がなく、timeBetweenEveictionRunsMillisが0より大きい場合にのみ意味があります.
lifo:borrowObjectがオブジェクトを返す場合、DEFAULT_を使用します.LIFO(last in first out、すなわちcacheのような最も頻繁に使用されるキュー)は、FalseであればFIFOキューを表す.
JedisPoolConfigのパラメータのデフォルト設定は次のとおりです.
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1
PS:上記の例はjedis-2.0.0に基づく.jar、commons-pool-1.6.jarが実行されます.
記事の出典:http://blog.sina.com.cn/s/blog_67196ddc0101dkz2.html