JedisPool을하는 것은 정말 다음 질문으로 발생하는 많은 문제가, 여기에 솔루션입니다 때 가상 머신에 구성된 레디 스를 사용하는 많은 사람들이있을 수 있으므로, 반드시 상대를 모두 사용하지, 나는 구성에 CentOS 서버 레디 스 인 사용, 문제의 원인 여기에서,이 지역의 경우 때문에, 다음, 당신은 문장을 주석 처리하려면 기본 구성 바인드 127.0.0.1 및 원격 구성 연결입니다 redis.conf, 보호 모드로 기본이 아닌 로컬 연결? 우리는 방문의 목적을 달성하기 위해 다른 구성을 암호를 설정하거나 수정해야합니다.
예를 들어, 도움말을 따라
스레드 "주요"redis.clients.jedis.exceptions.JedisDataException의 예외 : DENIED 레디 스가 실행되는 보호 때문에 모드 보호 모드가 활성화되어, 더 바인드 주소가 지정되지 않았에는 인증 암호는 클라이언트에 요청하지 않습니다. 에서 이 모드 연결 만 루프백에서 허용하는 인터페이스 . 당신은 당신이 다음 방법 중 하나를 채택 할 수있다 레디 스 외부 컴퓨터에서 연결하려면 : 1) 그냥하지 않도록 보호 루프백에서 명령 '더 CONFIG의 SET에게 보호 모드'를 전송하지 모드 인터페이스를 동일한 호스트 서버에서 레디 스에 연결하여 실행 그러나 SURE 레디 스 인터넷에서 공개적으로 액세스 할 수 없습니다 MAKE 경우당신은 어떻게 그렇게. 할 CONFIG 재 작성을 사용하여 이 변경을 영구적으로. 2) 또는 그냥 해제 할 수 있습니다 보호 레디 스 구성 파일을 편집하고 설정 모드를 보호 '아니오'로 모드 옵션을 한 다음 서버를 다시 시작. 당신은 단지 서버를 수동으로 시작한 경우 3) 에 대한 테스트는 '--protected 모드 없음'으로 다시 시작 옵션을 선택합니다. 4) 설정 바인드 주소 또는 인증 암호를 입력합니다. 참고 : 당신은해야 할 위해 위의 것들 중 하나를 위해 외부로부터의 연결을 수락 시작하는 서버.
마이너 해결이 오류 :
redis.clients.jedis.exceptions.JedisExhaustedPoolException는 : 풀이 고갈되기 때문에 리소스를 가져올 수 없습니다
redis.clients.jedis.util.Pool.getResource (Pool.java:53)에서
redis.clients.jedis.JedisPool.getResource에서 ( JedisPool.java:234)
com.jedis.jedistest.PoolTest.main (PoolTest.java:15)에서
java.util.NoSuchElementException :에 의한 없습니다 객체의 유효성을 검사
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject에서 (GenericObjectPool.java:479)
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject (GenericObjectPool.java:346)에서
redis.clients.jedis.util.Pool.getResource에서 (Pool.java:50)
... 2 개 더
다음, 솔루션은 적용되지 않습니다 찾기 위해 구글을 바이 수명이 다한가 원격 액세스에 대한 암호를 설정하지 않은 아마 때문에, 생각? 그냥 여기 토론을 보려면, https://www.oschina.net/question/579073_113004
원래 진정한에서 false로하고, 액세스 할 수 있습니다 (123) 레디 스 암호를 설정, 그래서 (false)를 poolConfig.setTestOnBorrow됩니다.
원래 비디오 링크는 다음과 같다 : https://www.bilibili.com/video/av51989396/?p=28
코드 노크 내부 빛나고 있지만, 일부 패키지의 다른 버전은 몇 가지 방법이 변경되었습니다.
JedisPoolUtil.java
패키지 com.jedis.jedistest, 가져 오기 redis.clients.jedis.Jedis, 가져 오기 redis.clients.jedis.JedisPool, 가져 오기 redis.clients.jedis.JedisPoolConfig; // 이중 잠금 Chcek 공공 클래스 JedisPoolUtil { 개인 정적 휘발성 JedisPool jedisPool = 널 (null) ; // 생성자 민영화 개인 JedisPoolUtil는 () { } // 예시의 방법에 의해 풀에 반환 공개 정적 JedisPool getJedisPoolInstance () { IF ( 널 == jedisPool) { // 로크 대상 동기화 (. JedisPoolUtil 클래스 ) { 경우 ( 널 == jedisPool) { JedisPoolConfig poolConfig = 새로운 JedisPoolConfig (); // poolConfig.setMaxTotal (1000); poolConfig.setMaxTotal (1000 ); poolConfig.setMaxIdle ( 32 ); poolConfig.setMaxWaitMillis ( * 1000 100 ); poolConfig.setTestOnBorrow ( 거짓 ); // poolConfig.setTestOnBorrow (TRUE); jedisPool = 새로운 JedisPool (poolConfig "233.233.223.223", 6666 ); } } } 반환 jedisPool을; } 공공 정적 무효 릴리스 (JedisPool jedispool, Jedis jedis) { 경우 ( 널 (null) =! jedis) { // jedisPool.returnResource (jedis) ---> jedis.close (); // 升级版的jedis用가까운来替代returnResource? // jedispool.getResource (); jedis.close (); } } }
PoolTest.java
1 개 패키지 com.jedis.jedistest; 2 세 수입 redis.clients.jedis.Jedis; 4 수입 redis.clients.jedis.JedisPool; 5 6 공중 클래스 PoolTest { 7 8 공용 정적 무효 메인 (문자열 []에 args) { 9 10 JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance (); 11 Jedis jedis = 널 ; 12 13 14 시도 { 15 jedis = jedisPool.getResource (); (16) jedis.auth ( "123" ); 17 jedis.set ( "K1", "siyi" ); 18 } 캐치 (예외 E) { 19 e.printStackTrace (); 20 } 마지막 { 21 JedisPoolUtil.release (jedisPool, jedis); 22 } 23 24 } 25 26 }