Hoje descobri que o método de conexão padrão do Jedis é jedis=new Jedis("localhost",6379), e o tempo limite de conexão sempre ocorre. Mais tarde descobri que o pacote da classe jedis também tem uma maneira de definir o tempo máximo de conexão.
1->A obtenção de uma instância do Jedis precisa ser obtida no JedisPool;
2->Após esgotar a instância do Jedis, você precisa devolvê-la ao JedisPool;
3->Se o Jedis cometer algum erro durante o uso, ele também precisará ser devolvido ao JedisPool;
O código é o seguinte
Copie o código do código da seguinte forma:
Configuração JedisPoolConfig = new JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
Piscina JedisPool;
piscina = novo JedisPool(config, "2xx.xx.xx.14", 6379);
booleano emprestarOrOprSuccess = true;
tentar {
jedis = pool.getResource();
// faz redis opt por instância
} catch (JedisConnectionException e) {
emprestarOrOprSuccess = falso;
if (jedis! = nulo)
pool.returnBrokenResource(jedis);
} finalmente {
if (emprestadoOrOprSuccess)
pool.returnResource(jedis);
}
jedis = pool.getResource();
JedisPool depende do pacote de classe Apache
commons-pool-1.5.6.jar
1-> Embora JedisConnectionException seja lançada, na verdade existem dois tipos de erros. Um é pool.getResource(), que não pode obter uma instância jedis disponível; o outro é que erros durante jedis.set/get também lançarão esta exceção; Para realizar a distinção, ela é implementada com base no fato de a instância ser nula. Se for nula, prova que a instância não foi inicializada, portanto não há necessidade de devolvê-la ao pool; não é nulo, prova que precisa ser retornado ao pool;
2->Quando ocorre um erro de instância, returnBrokenResource também deve ser chamado para devolvê-lo ao pool, caso contrário, ainda poderá haver dados no buffer da instância obtidos através de getResource na próxima vez, e um problema poderá ocorrer!
Os parâmetros de configuração do JedisPool dependem em grande parte dos requisitos reais do aplicativo e dos recursos de software e hardware. Eu nunca usei o commons-pool antes, então dessa vez passei uma sala inteira analisando o significado desses parâmetros. . . A maioria dos parâmetros de configuração do JedisPool são atribuídos pelos itens correspondentes do JedisPoolConfig.
maxActive: Controla quantas instâncias jedis um pool pode ser alocada, obtido através de pool.getResource(); se o valor for -1, significa que não há limite se o pool tiver instâncias jedis maxActive alocadas, o status do pool em; desta vez fica esgotado, em JedisPoolConfig
maxIdle: Controla o número máximo de instâncias jedis no estado inativo que um pool pode ter;
whenExhaustedAction: Indica a ação a ser tomada pelo pool quando todas as instâncias jedis no pool forem alocadas, existem três tipos de WHEN_EXHAUSTED_FAIL por padrão (o que significa que quando não houver instância jedis, ela será lançada diretamente;
NoSuchElementException), WHEN_EXHAUSTED_BLOCK (significa que está bloqueado ou uma JedisConnectionException é lançada quando maxWait é atingido), WHEN_EXHAUSTED_GROW (significa que uma nova instância jedis é criada, o que significa que o conjunto maxActive é inútil);
maxWait: indica o tempo máximo de espera ao emprestar uma instância Jedis. Se o tempo de espera for excedido, JedisConnectionException será lançada diretamente;
testOnBorrow: Ao emprestar uma instância jedis, se deve realizar a operação Alidate antecipadamente, se for verdade, as instâncias jedis obtidas estão disponíveis;
testOnReturn: se deve realizar a operação de validação antecipadamente ao retornar ao pool;
testWhileIdle: Se verdadeiro, significa que há um thread evitor de objeto inativo verificando o objeto inativo. Se a validação falhar, o objeto será eliminado do pool; este item só será significativo quando timeBetweenEvictionRunsMillis for maior que 0;
timeBetweenEvictionRunsMillis: indica o número de milissegundos que o evitor de objeto inativo precisa para dormir entre duas varreduras;
numTestsPerEvictionRun: indica o número máximo de objetos verificados pelo evitor de objeto ocioso a cada vez;
minEvictableIdleTimeMillis: Indica o tempo mínimo para um objeto permanecer no estado inativo pelo menos antes de poder ser varrido e despejado pelo evitor de objeto inativo este item só tem sentido quando timeBetweenEvictionRunsMillis for maior que 0;
softMinEvictableIdleTimeMillis: com base em minEvictableIdleTimeMillis, pelo menos objetos minIdle são adicionados ao pool. Se -1, despejado não removerá nenhum objeto com base no tempo ocioso. Se minEvictableIdleTimeMillis>0, essa configuração não terá sentido e só será significativa quando timeBetweenEvictionRunsMillis for maior que 0;
lifo: Quando empréstimoObject retorna um objeto, DEFAULT_LIFO (último a entrar, primeiro a sair, a fila usada com mais frequência, semelhante ao cache) é usado. Se for falso, significa fila FIFO;
As configurações padrão do JedisPoolConfig para alguns parâmetros são as seguintes:
testWhileIdle = verdadeiro
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1