0

JRockit (Tomcat 7 でもテスト済み) を使用して WebLogic 11 の Grails 2.0.4 で Redis プラグイン 1.0.0 を使用して、次を使用して Redis を更新していますが、タイムアウト例外が発生し続けています...

template.execute(new RedisCallback<Object>() {
   public Object doInRedis(RedisConnection connection) throws DataAccessException {
      connection.multi()    
      for( def cacheUpdate : cacheList)
         connection.zAdd(cacheUpdate[0], cacheUpdate[1], cacheUpdate[2]);
     connection.exec()
      return null
   }
}, true);

が小さい場合、コードは問題なく動作cacheListしますが、約 1M の小さなオブジェクトを読み込もうとしているため、タイムアウトの問題が発生します。

java.net.SocketTimeoutException: Read timed out
        at jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:46)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.net.SocketInputStream.read(SocketInputStream.java:90)
        at redis.clients.util.RedisInputStream.fill(RedisInputStream.java:110)
        at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:46)
        at redis.clients.jedis.Protocol.process(Protocol.java:59)
        at redis.clients.jedis.Protocol.read(Protocol.java:122)
        at redis.clients.jedis.Connection.getAll(Connection.java:207)
        at redis.clients.jedis.BinaryTransaction.exec(BinaryTransaction.java:25)
        at com.oppen.fund.FundService$1.doInRedis(FundService.groovy:397)

Redis 構成でタイムアウトを -1 に設定しましたが、Redis はそれを尊重していないようです。-1 はタイムアウトがないことを意味すると思いますか?

cacheLoaderJedisConnectionFactory(JedisConnectionFactory) {      
   hostName = '${grails.cache.redis.hostName}'
   port = '${grails.cache.redis.port}'
   timeout = -1
   password = null
   poolConfig = ref('grailsCacheJedisPoolConfig')       
}

これをWebLogic 11とTomcat 7の両方で試しましたが、同じタイムアウトの問題です。

4

1 に答える 1

0

**

アップデート

**

さらに調査した結果-1、Redis キャッシュ接続タイムアウトに使用することが問題でした。代わりに非常に大きな正の値を使用して、タイムアウトの問題を解消しました。

于 2012-09-12T19:48:23.743 に答える