首页 > 技术文章 > Redis 连接失败redis Can't init enough connections amount!

songanwei 2018-06-12 09:28 原文

Can't init enough connections amount! Only 0 from 10 were initialized. Server: IP:6379

 无法初始化足够的连接数量!只有0和10被初始化。

vi redis.conf

注释:#bind 127.0.0.1

protected-mode yes 改成 protected-mode no

 

 

可能还是因为配置的连接池不够  

我的原因的RedissonConfig配置的不够

package com.guige.core.conf;

import io.netty.channel.nio.NioEventLoopGroup;
import org.redisson.Config;
import org.redisson.Redisson;
import org.redisson.RedissonClient;
import org.redisson.client.codec.Codec;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.util.ClassUtils;

/**
 * Created by kl on 2017/09/26.
 * redisson 客户端配置
 */
@Component
@Configuration
public class RedissonConfig {
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private Integer port;
    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.pool.minidle}")
    private int connectionMinimumIdleSize = 10;//从节点最小空闲连接数)
    private int idleConnectionTimeout = 10000;
    private int pingTimeout = 1000;
    private int connectTimeout = 10000;
    @Value("${spring.redis.timeout}")
    private int timeout = 3000;
    private int retryAttempts = 3;//命令失败重试次数)
    private int retryInterval = 1500; //命令重试发送时间间隔,单位:毫秒)
    private int reconnectionTimeout = 3000;//重新连接时间间隔,单位:毫秒)
    private int failedAttempts = 3;//执行失败最大次数)

    private int subscriptionsPerConnection = 5;//单个连接最大订阅数量
    private String clientName = null; //名称
    @Value("${spring.redis.pool.minidle}")
    private int subscriptionConnectionMinimumIdleSize = 1; //从节点发布和订阅连接的最小空闲连接数)
    @Value("${spring.redis.pool.maxidle}")
    private int subscriptionConnectionPoolSize = 50; //(从节点发布和订阅连接池大小)
    @Value("${spring.redis.pool.maxidle}")
    private int connectionPoolSize = 64;//连接池大小)
    @Value("${spring.redis.database}")
    private int database = 0;
    private boolean dnsMonitoring = false;//是否启用DNS监测)
    private int dnsMonitoringInterval = 5000;//(DNS监测时间间隔,单位:毫秒)

    private int thread=0; //当前处理核数量 * 2


    @Bean(destroyMethod = "shutdown")
    RedissonClient redissonClient() throws Exception {
        Config config = new Config();
        config.useSingleServer().setAddress(host+":"+port)
                .setConnectionMinimumIdleSize(connectionMinimumIdleSize)
                .setConnectionPoolSize(connectionPoolSize)
                .setDatabase(database)
                .setDnsMonitoring(dnsMonitoring)
                .setDnsMonitoringInterval(dnsMonitoringInterval)
                .setSubscriptionConnectionMinimumIdleSize(subscriptionConnectionMinimumIdleSize)
                .setSubscriptionConnectionPoolSize(subscriptionConnectionPoolSize)
                .setSubscriptionsPerConnection(subscriptionsPerConnection)
                .setClientName(clientName)
                .setFailedAttempts(failedAttempts)
                .setRetryAttempts(retryAttempts)
                .setRetryInterval(retryInterval)
                .setReconnectionTimeout(reconnectionTimeout)
                .setTimeout(timeout)
                .setConnectTimeout(connectTimeout)
                .setIdleConnectionTimeout(idleConnectionTimeout)
                .setPingTimeout(pingTimeout)
                .setPassword(password);
        Codec codec = (Codec) ClassUtils.forName("org.redisson.codec.JsonJacksonCodec", ClassUtils.getDefaultClassLoader()).newInstance();
        config.setCodec(codec);
        config.setThreads(thread);
        config.setEventLoopGroup(new NioEventLoopGroup());
        config.setUseLinuxNativeEpoll(false);
        return Redisson.create(config);
    }
}
spring: 
 redis:
      database: 1
      host: 192.168.1.161
      port: 6379
      timeout: 50000
      password: 201805
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        maxactive: 64
        # 连接池中的最大空闲连接
        maxidle: 64
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        maxwait: -1
        # 连接池中的最小空闲连接
        minidle: 1

 

 

package com.guige.core.conf;

import com.guige.core.ext.common.redis.MyCacheErrorHandler;
import com.guige.core.ext.common.redis.MyKeyGenerator;
import com.guige.core.ext.common.redis.MyRedisCacheManager;
import com.guige.core.ext.common.redis.MyRedisTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.interceptor.CacheErrorHandler;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisPoolConfig;

/**
 * TODO
 *
 * @author songaw
 * @date 2018/7/17 11:29
 */
@Component
@Configuration
public class RedisConf {
    @Value("${spring.redis.database}")
    private Integer database;

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.password}")
    private String password;

    @Value("${spring.redis.port}")
    private Integer port;

    @Value("${spring.redis.timeout}")
    private Integer timeout;

    @Value(value = "${spring.redis.expire:300}")
    private Integer expiration;

    @Value("${spring.redis.pool.maxactive}")
    private int maxActive;

    @Value("${spring.redis.pool.minidle}")
    private int minIdle;

    @Value("${spring.redis.pool.maxidle}")
    private int maxIdle;

    @Bean
    public JedisPoolConfig jedisPoolConfig(){
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(this.maxIdle);
        poolConfig.setMinIdle(this.minIdle);
        poolConfig.setTestOnCreate(true);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestWhileIdle(true);
        return poolConfig;
    }
    @Bean
    public JedisConnectionFactory jedisConnectionFactory(){
        JedisPoolConfig config = jedisPoolConfig();
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(config);
        jedisConnectionFactory.setDatabase(this.database);
        jedisConnectionFactory.setHostName(this.host);
        jedisConnectionFactory.setPassword(this.password);
        jedisConnectionFactory.setPort(this.port);
        jedisConnectionFactory.setTimeout(this.timeout);
        return jedisConnectionFactory;
    }
    @Bean
   public  RedisTemplate redisTemplate(){
        MyRedisTemplate myRedisTemplate = new MyRedisTemplate();
        myRedisTemplate.setConnectionFactory(jedisConnectionFactory());
        return myRedisTemplate;
    }
    public RedisCacheManager redisCacheManager(){
        MyRedisCacheManager myRedisCacheManager = new MyRedisCacheManager(redisTemplate());
        return myRedisCacheManager;
    }
    @Bean
    public CacheErrorHandler cacheErrorHandler(){
        MyCacheErrorHandler myCacheErrorHandler = new MyCacheErrorHandler();
        return myCacheErrorHandler;
    }
    @Bean
    KeyGenerator keyGenerator(){
        MyKeyGenerator myKeyGenerator = new MyKeyGenerator();
        return myKeyGenerator;
    }
}

 

推荐阅读