今日、Jedis のデフォルトの接続方法は jedis=new Jedis("localhost",6379) であり、常に接続タイムアウトが発生することがわかりました。後で、jedis クラス パッケージにも最大接続時間を設定する方法があることがわかりました。
1->Jedis インスタンスを取得するには、JedisPool から取得する必要があります。
2->Jedis インスタンスを使い切った後、JedisPool に返す必要があります。
3-> Jedis が使用中にエラーを起こした場合、それも JedisPool に返す必要があります。
コードは次のとおりです
次のようにコードをコピーします。
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
JedisPool プール;
プール = 新しい JedisPool(config, "2xx.xx.xx.14", 6379);
ブール値のborrowOrOprSuccess = true;
試す {
jedis = プール.getResource();
// Redis をインスタンスごとに選択します
} catch (JedisConnectionException e) {
借入またはOprSuccess = false;
if (ジェディス != null)
プール.returnBrokenResource(jedis);
} ついに {
if (借用または成功)
プール.returnResource(jedis);
}
jedis = プール.getResource();
JedisPool は Apache クラス パッケージに依存します
commons-pool-1.5.6.jar
1-> JedisConnectionException がスローされますが、実際には 2 種類のエラーがあります。1 つは、利用可能な jedis インスタンスを取得できないもので、もう 1 つは、jedis.set/get 中のエラーでもこの Exception がスローされます。区別を実現するために、インスタンスが null であるかどうかに基づいて実装されます。null の場合は、インスタンスがまったく初期化されていないことが証明されるため、インスタンスが初期化されていない場合は、インスタンスをプールに返す必要はありません。 null ではない場合、プールに返す必要があることが証明されます。
2->インスタンスエラーが発生した場合、returnBrokenResourceを呼び出してプールに戻す必要があります。そうしないと、次回getResourceで取得したインスタンスのバッファにデータが残っている可能性があり、問題が発生する可能性があります。
JedisPool の構成パラメータは、実際のアプリケーション要件とソフトウェアおよびハードウェアの機能に大きく依存します。これまで commons-pool を使用したことがなかったので、今回は部屋全体を費やしてこれらのパラメータの意味を調べました。 。 。 JedisPool の構成パラメータのほとんどは、JedisPoolConfig の対応する項目によって割り当てられます。
maxActive: プールに割り当てることができる jedis インスタンスの数を制御します。pool.getResource() によって取得されます。値が -1 の場合、プールに maxActive jedis インスタンスが割り当てられている場合は、プールのステータスが制限されません。今回は、JedisPoolConfig で Exhausted になります
maxIdle: プールが保持できるアイドル状態の jedis インスタンスの最大数を制御します。
whenExhaustedAction: プール内のすべての jedis インスタンスが割り当てられたときにプールによって実行されるアクションを示します。デフォルトでは 3 種類の WHEN_EXHAUSTED_FAIL があります (つまり、jedis インスタンスがない場合は直接スローされます)。
NoSuchElementException)、WHEN_EXHAUSTED_BLOCK (ブロックされているか、maxWait に達したときに JedisConnectionException がスローされることを意味します)、WHEN_EXHAUSTED_GROW (新しい jedis インスタンスが作成されることを意味します。これは、設定された maxActive が役に立たないことを意味します)。
maxWait: Jedis インスタンスを借用するときの最大待機時間を示します。待機時間を超えると、JedisConnectionException が直接スローされます。
testOnBorrow: jedis インスタンスを借用するときに、事前に Alidate 操作を実行するかどうか。true の場合、取得した jedis インスタンスが使用可能になります。
testOnReturn: プールに戻るときに事前に検証操作を実行するかどうか。
testwhileIdle: true の場合、アイドル オブジェクトをスキャンするアイドル オブジェクトのエビター スレッドが存在することを意味します。検証が失敗した場合、この項目は timeBetweenEvictionRunsMillis が 0 より大きい場合にのみ意味を持ちます。
timeBetweenEvictionRunsMillis: アイドル オブジェクトのエビターが 2 つのスキャンの間にスリープする必要があるミリ秒数を示します。
numTestsPerEvictionRun: アイドル オブジェクト エビターによって毎回スキャンされるオブジェクトの最大数を示します。
minEvictableIdleTimeMillis: オブジェクトが少なくともアイドル オブジェクト エビターによってスキャンされ削除されるまでの最小時間を示します。この項目は timeBetweenEvictionRunsMillis が 0 より大きい場合にのみ意味を持ちます。
SoftMinEvictableIdleTimeMillis: minEvictableIdleTimeMillis に基づいて、少なくとも minIdle オブジェクトがプールに追加されます。 -1 の場合、evicted はアイドル時間に基づいてオブジェクトを削除しません。 minEvictableIdleTimeMillis>0 の場合、この設定は無意味であり、timeBetweenEvictionRunsMillis が 0 より大きい場合にのみ意味があります。
lifo:borrowObject がオブジェクトを返すとき、DEFAULT_LIFO (後入れ先出し、キャッシュに似た最も頻繁に使用されるキュー) が使用されます。これが False の場合、FIFO キューを意味します。
一部のパラメーターの JedisPoolConfig のデフォルト設定は次のとおりです。
testwhileIdle=true
minEvictableIdleTimeMills=60000
エビクション実行間の時間ミリス=30000
numTestsPerEvictionRun=-1