Groovy Redis插件超时问题

时间:2012-09-12 16:07:29

标签: tomcat grails groovy redis weblogic

在带有JRockit的WebLogic 11上的Grails 2.0.4上使用Redis插件1.0.0(我们也在Tomcat 7上测试过),我们使用以下内容更新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上都试过这个问题,同样是超时问题。

1 个答案:

答案 0 :(得分:0)

**

更新

**

经过进一步调查后,使用-1进行Redis缓存连接超时是个问题;我们使用了非常大的正值,消除了超时问题。