I'm using latest Spring Data Redis (1.0.1.RELEASE) on Tomcat 7. In addition, I'm using the Jedis connector, along with use-pool set to 'true'. My spring config stuff is defined in a standard way as per documentation.
My issue is that I'm getting sporadic ClassCastExceptions, e.g:
orCode:java.lang.ClassCastException: [B cannot be cast to java.util.List at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:206) at redis.clients.jedis.BinaryTransaction.exec(BinaryTransaction.java:28)
From reading Jedis newsgroup, it looks like those can occur if a 'dirty' Jedis instance is released back into the pool (usually during broken pipeline operations). I'm using Spring Data Redis as follows:Code:java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Long at redis.clients.jedis.Connection.getIntegerReply(Connection.java:188) at redis.clients.jedis.Jedis.publish(Jedis.java:1978)
It looks like, RedisConnectionUtils.releaseConnection may not in fact, clean up, broken jedis instance - in which case, is there a proper way to disposing of jedis instances? I understand this isn't quite the standard way of using RedisTemplate wrapper.Code:RedisConnectionFactory factory = template.getConnectionFactory(); RedisConnection conn = factory.getConnection(); Jedis jedis = (Jedis)conn.getNativeConnection(); try{ Pipeline p = jedis.pipelined(); //More jedis stuff goes here p.sync(); }catch(Exception e){ e.printStackTrace(); }finally{ RedisConnectionUtils.releaseConnection(conn, factory); }


Reply With Quote
