배경
합리적인 Jedispool Resource Pool 매개 변수 설정은 비즈니스 사용에 Redis 사용을 보호 할 수 있습니다. 이 기사는 Jedispool 사용 및 리소스 풀의 매개 변수에 대한 자세한 설명을 제공하고 마지막으로 "가장 합리적인"구성을 제공합니다.
1. 사용 방법
Maven은 공식 2.9.0을 예제 (Jedis Release)로 복용하면 다음과 같이 의존합니다.
<pectionency> <groupid> redis.clients </groupid> <artifactid> jedis </artifactid> <bersion> 2.9.0 </version> <cope> 컴파일 </scope> </fectionency>
Jedis는 Apache Commons-Pool2를 사용하여 Jedis Resource Pool을 관리하므로 Jedispool을 정의 할 때 중요한 매개 변수는 Resource Pool GenericObjectPoolConfig입니다. 사용법은 다음과 같습니다. 많은 리소스 관리 및 사용 매개 변수가 있습니다 (자세한 내용은 섹션 2 참조)
참고 : 나중에 genericobjectpoolconfig 대신 Jedispoolconfig를 사용하는 것이 좋습니다.
genericobjectpoolconfig jedispoolconfig = 새로운 genericobjectpoolconfig (); jedispoolconfig.setmaxtotal (..); jedispoolconfig.setmaxidle (..); jedispoolconfig.setminidle (..); jedispoolconfig.setmillis (..);
Jedispool의 초기화는 다음과 같습니다.
// redishost와 redisport는 IP 및 인스턴스의 포트입니다. // redispassword는 인스턴스의 비밀번호입니다. // timeout은 연결 시간 초과 및 읽기 및 쓰기 시간 초과입니다. Jedis 2.8 이후 ConnectionTimeout 및 Sotimeout을 구별하는 생성자가 있습니다. Jedispool Jedispool = New Jedispool (Jedispoolconfig, Redishost, Redisport, Timeout, Redispassword); Jedis Jedis = null; try {jedis = jedispool.getresource (); // 특정 명령 jedis.executeCommand ()} catch (예외 e) {logger.error (e.getMessage (), e);} 최종 {if (jedis! = null) jedis.close (); // 연결이 닫히지 않습니다. Jedispool 모드에서는 Jedis가 리소스 풀로 돌아갑니다. }2. 매개 변수 설명
Jedispool은 리소스가 제어 가능한 범위 내에 있고 스레드 안전을 제공하도록하지만 합리적인 일반적인 콥 푸일 콘 피그 구성은 redis를 사용하여 응용 프로그램을 보호 할 수 있습니다. 중요한 매개 변수는 다음과 같습니다.
현재 환경에서 Jedis Connection은 리소스이며 Jedispool은 Jedis 연결을 관리합니다.
1. 자원 설정 및 사용
| 일련 번호 | 매개 변수 이름 | 의미 | 기본값 | 사용 권장 사항 |
|---|---|---|---|---|
| 1 | maxtotal | 리소스 풀의 최대 연결 수 | 8 | 제안을 설정하려면 다음 섹션을 참조하십시오. |
| 2 | Maxidle | 리소스 풀에서 허용하는 최대 무료 연결 수 | 8 | 제안을 설정하려면 다음 섹션을 참조하십시오. |
| 3 | 미니 디드 | 리소스 풀은 최소 무료 연결 수를 보장합니다 | 0 | 제안을 설정하려면 다음 섹션을 참조하십시오. |
| 4 | 블록 whenxhausted | 자원 풀이 소진되면 발신자가 기다리려고하는지 여부. 사실 일 때만 다음 Maxwaitmillis가 적용됩니다 | 진실 | 기본값을 사용하는 것이 좋습니다 |
| 5 | Maxwaitmillis | 리소스 풀 연결이 소진되면 발신자의 최대 대기 시간 (밀리 초) | -1 : 타임 아웃이 결코 초과되지 않음을 의미합니다 | 기본값은 권장되지 않습니다 |
| 6 | testonborrow | 리소스 풀에서 연결을 빌릴 때 연결 유효성 (PIN)을 확인할지 여부는 유효하지 않은 연결이 제거됩니다. | 거짓 | 비즈니스 볼륨이 크면 False (Ping의 오버 헤드)로 설정하는 것이 좋습니다. |
| 7 | Testonreturn | 연결 유효성 (PIN)을 확인할지 자원 풀에 연결을 반환 할 때 유효하지 않은 연결이 제거됩니다. | 거짓 | 비즈니스 볼륨이 크면 False (Ping의 오버 헤드)로 설정하는 것이 좋습니다. |
| 8 | jmxenabled | JMX 모니터링 활성화 여부는 모니터링에 사용할 수 있습니다. | 진실 | 이를 활성화하는 것이 좋습니다. 그러나 응용 프로그램 자체도 활성화되어야합니다. |
2. 유휴 자원 모니터링
유휴 제다이 객체 감지, 다음 4 가지 매개 변수가 결합되어 완료되며 테스트를 거치는 동안이 기능의 스위치입니다.
| 일련 번호 | 매개 변수 이름 | 의미 | 기본값 | 사용 권장 사항 |
|---|---|---|---|---|
| 1 | 테스트하시는 테스트 | 유휴 리소스 모니터링을 활성화할지 여부 | 거짓 | 진실 |
| 2 | TimeBetweenevictionRunsmillis | 유휴 자원의 탐지 기간 (밀리 초) | -1 : 탐지가 없습니다 | 설정을 설정하거나 직접 사이클을 선택하거나 기본적으로 JedispoolConfig에서 구성을 사용하거나 다음 구성을 사용할 수 있습니다. |
| 3 | minevictableidletimemillis | 리소스 풀의 최소 유휴 자원 시간 (밀리 초). 이 값에 도달하면 유휴 리소스가 제거됩니다. | 10006030 = 30 분 | 자신의 비즈니스를 기반으로 결정할 수 있고, 대부분의 기본값은 충분하거나 JeidSpoolconfig에서 다음 구성을 사용하는 것을 고려할 수 있습니다. |
| 4 | NumTestSpereVictionRun | 유휴 자원 감지를 수행 할 때는 매번 샘플 수 | 3 | 적용하는 연결 수에 따라 미세 조정할 수 있습니다. -1로 설정하면 모든 연결에 대한 유휴 모니터링을 수행합니다. |
사용하기 위해 Jedis는 Jedispoolconfig를 제공하여 GenericObjectPoolConfig를 상속하고 유휴 모니터링 설정을 설정합니다.
Public Class Jedispoolconfig는 GenericObjectPoolConfig {public jedispoolconfig () {// 연결 풀을 사용하여 삶을 더 쉽게 만들기위한 기본값 :) settestwhileIdle (true); // setMineVictableDletimemillis (60000); // settimebetweenevictionRunsmillis (30000); setNumtestSpereVictionRun (-1); }}모든 기본값은 org.apache.commons.pool2.impl.baseobjectpoolconfig에서 볼 수 있습니다.
3. 자원 풀 크기 (maxtotal), 유휴 (Maxidle Minidle) 설정 제안
1. 의미 : 최대 연결 수
실제로 이것은 대답하기 어려운 질문이며, 고려해야 할 많은 요소가 있습니다.
예를 들어 설명하려면 다음과 같이 가정합니다.
그런 다음 이론적으로 필요한 자원 풀 크기는 50000 / 1000 = 50입니다. 그러나 실제로는 이론적 가치이며 일부 자원은 이론적 가치보다 예약되어야한다고 생각해야합니다. 일반적으로 말하면, maxtotal은 이론적 가치보다 클 수 있습니다.
그러나 가치가 클수록 더 좋습니다. 한편으로, 클라이언트 및 서버 리소스를 차지하기에는 연결이 너무 많습니다. 반면, QP가 높은 Redis와 같은 서버의 경우 큰 명령을 차단하는 것은 큰 리소스 풀을 설정하더라도 여전히 쓸모가 없습니다.
2. Maxidle Minidle
Maxidle은 실제로 비즈니스에 필요한 최대 연결 수입니다. maxtotal은 마진을 주려고하므로 Maxidle은 너무 작게 설정되지 않아야합니다. 그렇지 않으면 New Jedis (새로운 연결) 오버 헤드가 발생하고 Minidle은 유휴 리소스 모니터링을 제어하는 것입니다.
연결 풀의 최상의 성능은 maxtotal = maxidle로 연결 풀 스케일링으로 인한 성능 간섭을 피합니다. 그러나 동시성이 크지 않거나 maxtotal이 너무 높아지면 불필요한 연결 자원 폐기물로 이어질 것입니다.
각 노드에서 사용하는 연결 풀은 실제 총 OP 및 호출 Redis 클라이언트의 크기에 따라 전체적으로 평가 될 수 있습니다.
3. 모니터링
실제로 가장 신뢰할 수있는 가치는 모니터링을 통해 "최적 가치"를 얻는 것입니다. 합리적인 값을 찾기 위해 일부 수단 (예 : JMX)을 통해 모니터링 구현을 고려할 수 있습니다.
4. 자주 묻는 질문
1. "불충분 한"자원
redis.clients.jedis.exceptions.jedisconnectionException : java.util.nosuchelementexception : java.util.nosuchelementexception : 유휴 대상 org.apache.commons.pool2.impl.genericobjectpool.borybobject (genericobjectpool.java:449)의 시간을 기다리는 수영장에서 자원을 얻을 수 없습니다.
또는
redis.clients.jedis.exceptions.jedisconnectionException : java.util.nosuchelementexception : pool satheredat org.apache.commons.pool2.impl.genericobjectpool.brosporobject (genericobjectpool.java:464)의 수영장에서 자원을 얻을 수 없습니다.
두 경우 모두 리소스 풀에서 리소스를 얻을 수 없지만 첫 번째는 시간 초과이며, 두 번째 경우는 Blockwhenexhaested가 거짓이기 때문에 전혀 같지 않기 때문입니다.
그러한 예외를 겪을 때 자원 풀이 충분히 크지 않다고 맹목적으로 생각하지 마십시오. 세 번째 섹션은 분석되었습니다. 구체적인 이유로 네트워크, 리소스 풀 매개 변수 설정, 리소스 풀 모니터링 (JMX가 모니터링되는 경우), 코드 (예 : jdis.close ()), 느린 쿼리, DNS 및 기타 문제를 확인할 수 있습니다.
자세한 내용은이 기사를 참조하십시오 : https://www.atatech.org/articles/77799
2. 예리 풀을 예열합니다
시간 초과 시간 설정과 같은 몇 가지 이유로 인해 일부 프로젝트는 성공적인 시작 후에 시간이 걸립니다. Jedispool이 최대 리소스 수와 최소 무료 리소스 수를 정의하면 Jedis 연결을 수영장에 실제로 넣지 않습니다. 처음으로 사용되면 수영장에는 자원이 없으므로 새로운 Jedis가됩니다. 그것을 사용한 후에는 특정 시간 간접비가 발생할 수 있습니다. 따라서 Jedispool의 정의 후에 Jedispool의 예열을 미리 예열하는 것을 고려할 수도 있습니다. 예를 들어 최소 무료 번호는 예열 수량입니다.
목록 <Jedis> minidlejedislist = new ArrayList <Jedis> (jedispoolconfig.getMinidle ()); for (int i = 0; i <jedispoolconfig.getminidle (); i ++) {jedis jedis = null; try {jedis = pool.getResource (); minidlejedislist.add (제다이); jedis.ping (); } catch (예외 e) {logger.error (e.getMessage (), e); } for (int i = 0; i <jedispoolconfig.getminidle (); i ++) {jedis jedis = null; try {jedis = minidlejedislist.get (i); jedis.close (); } catch (예외 e) {logger.error (e.getMessage (), e); } 마지막으로 { }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.