2016-04-14 15 views
3

私はRedisとの通信にSpring RedisTemplate(spring-data-redis 1.7.1)を使用します。 regexp(例: "context:user1:*")でキーを取得して削除する必要があります。私は、キーSpring RedisTemplate:8回の呼び出し後メソッドキーが電話を切る

{ 
    String key = String.format("%s:%s:%s", context, userId,"*"); 
    Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys(key.getBytes()); 
    logger.debug(String.format("test log")); 
} 

の配列を取得するための方法"RedisTemplate.keys(...)"を使用しますが、8-9の繰り返し呼び出しrestTemplates.keys(...)に私のJavaサービスの実行を停止します。メソッドの呼び出しはフレームワークから返されません。私のサービスはハングアップします。それは毎回起こっている。回避策はサービスを再開するだけです。

+0

「but on 8-9 iterationで、call restTemplates.keys(...)はMy Javaサービスの実行を停止します。」ブラウザはロードし続けますか? –

+0

はい、redisTemplate.getConnectionFactory()。getConnection()。keys(key.getBytes())の8-9回の呼び出しの後。私のサービスは読み込みを続ける –

+0

あなたは鍵を見つけるだろうと推測しているのはなぜですか?キーが見つからない場合はどうなりますか?第二に、keys.getBytesを取得するコードはどこですか?キーを最初に取得し、ヌルかどうかを確認してから、試してみてください。 Redisのデバッグログを有効にすることはできますか? –

答えて

3

あなたがプールでJedisを使用していると仮定すると、基本的な接続プールが使い果たされてしまいます。

redisTemplate.getConnectionFactory().getConnection()を呼び出すたびに、接続プールから新しい接続が割り当てられます。 connection.close()に電話しますか?そうでなければ、プールは使い果たされる。プールはあなたの要求をブロックし始めます(別のスレッドが接続を返すので、接続を要求するスレッドがそれを使用できるようにします)。

+0

ありがとうございます。また、redisTemplate.getConnectionFactory()。getConnection()。keys(...)をredisTemplate.keys(..)に変更します。 –

関連する問題