0

When I use redisTemplate.keys to get match pattern keys. One Exception occurs. But when I run 'keys' command in my redis server , it works.

Here is the stack trace below.

Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.
    at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:199) ~[jedis-2.9.0.jar:?]
    at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40) ~[jedis-2.9.0.jar:?]
    at redis.clients.jedis.Protocol.process(Protocol.java:151) ~[jedis-2.9.0.jar:?]
    at redis.clients.jedis.Protocol.read(Protocol.java:215) ~[jedis-2.9.0.jar:?]
    at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340) ~[jedis-2.9.0.jar:?]
    at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:276) ~[jedis-2.9.0.jar:?]
    at redis.clients.jedis.BinaryJedis.keys(BinaryJedis.java:357) ~[jedis-2.9.0.jar:?]
    at org.springframework.data.redis.connection.jedis.JedisConnection.keys(JedisConnection.java:871) ~[spring-data-redis-1.8.1.RELEASE.jar:?]
    ... 49 more

Here is my java code.

Redis config.

public class DefaultRedisConfig {
    @Resource
    protected Environment env;

    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(Converter.toInt(env.getRequiredProperty("redis.maxIdle"), 18));
        jedisPoolConfig.setMaxWaitMillis(env.getProperty("redis.max.wait.time", int.class, Protocol.DEFAULT_TIMEOUT));
        jedisPoolConfig.setMaxTotal(env.getProperty("redis.max.total", int.class, 8));
        jedisPoolConfig.setTestOnBorrow(true);
        jedisPoolConfig.setTestOnReturn(true);
        return jedisPoolConfig;
    }

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName(env.getProperty("redis.host"));
        factory.setPassword(env.getProperty("redis.password"));
        factory.setPort(Converter.toInt(env.getRequiredProperty("redis.port"), 6379));
        factory.setUsePool(true);
        factory.setPoolConfig(jedisPoolConfig());
        return factory;
    }

    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }

}

Test code.

@Resource
private RedisTemplate redisTemplate;

public void testCommandKeys() {
    Set keys = redisTemplate.keys("Ge.*");
}
Gabriel.ge
  • 168
  • 3
  • 15

0 Answers0