2013-02-21 106 views
9

私は.hgetallを完了する問題を抱えている、ここで私が試したものです:、設定Jedisタイムアウト

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out 
    at redis.clients.jedis.Protocol.process(Protocol.java:79) 
    at redis.clients.jedis.Protocol.read(Protocol.java:131) 
    at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:199) 
    at redis.clients.jedis.Jedis.hgetAll(Jedis.java:851) 

[OK]を

Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800); 

Jedis jedis = new Jedis(REDIS_MASTER_NODE); 
    jedis.connect(); 
    jedis.configSet("timeout", "30"); 

    Map<String, String> alreadyStored = jedis.hgetAll(redisTargetHash); 

、ここでは、私が何を得るのです

でした。

答えて

13

Jedis接続タイムアウトを設定されて何をやりたい、あなたはそのために作られた特別なコンストラクタ使用してそれを行う必要がある場合:何をやっている

public Jedis(final String host, final int port, final int timeout) 

をjedisからのRedis設定にタイムアウトを設定することです。 CONFIG SET timeout 60を実行すると、60秒後にクライアント接続がアイドルになることを意味します。だからあなたはジェダイで例外を得るのです。

+4

この接続タイムアウトまたはソケット読み取りタイムアウトです。 – Trying

+5

タイムアウトの単位とは何ですか?のように、数秒またはミリ秒ですか? –

+0

@xetorthio jedisでクエリのタイムアウトを指定する方法を教えてください。現在、私は 'jedis-2.6.0.jar'を使っています。それらのデフォルト値は何か教えてください。 私の理解として、 'connectionTimeout'は新しい接続確立タイムアウトです。 –

5

これは、xetorthioの答えに対する少しの拡張ですが、ここではJedisPoolでの使用に似たアプローチがあります。 (警告:これは直接Jedisバージョン2.6.2のコードを見てから私の理解に基づいており、ライブユースケースでテストされていません。)

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); 
    jedisPoolConfig.setMaxWaitMillis(writeTimeout); 
    JedisPool pool = new JedisPool(jedisPoolConfig, redisHost, port, readTimeout); 

writeTimeoutがからJedisリソースの最大時間です書き込み操作を待機するプール。

プールコンストラクタに指定されたreadTimeoutは、ソケット読み取りの待機時間です(詳細はjava.net.Socket.setSoTimeoutを参照)。考慮すべき

+0

私のために働いた。どうもありがとう.. –

1

いくつかのこと:JedisとJedisPoolクラスの両方のために

  1. 、タイムアウトはミリ秒です。クライアントがアイドル状態の場合でも、int redis.clients.jedis.Protocol.DEFAULT_TIMEOUT = 2000 [0x7d0]

  2. thisドキュメントを1として、Redisの最近のバージョンではないに近い接続を行います。 デフォルトのタイムアウトは、少なくとも2.5.1で、私が見るように、2000((ミリ秒))です。私はまだこれを確認していない、私は私が行うときに私はポストを更新しようとします。

関連する問題