Redis 다시 만난 구덩이 로
문제.
그 동안 파충 류 를 하 다가 redis 로 URL 을 만 들 었 더 니 문제 가 자주 발생 했 습 니 다.먼저 몇 가지 이상 을 보 겠 습 니 다.
redis.clients.jedis.exceptions.JedisDataException: ERR Protocol error: invalid multibulk length
at redis.clients.jedis.Protocol.processError(Protocol.java:127)
at redis.clients.jedis.Protocol.process(Protocol.java:161)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getIntegerReply(Connection.java:265)
at redis.clients.jedis.Jedis.zadd(Jedis.java:1385)
at com.shu2man.service.RedisServiceImpl.zadd(RedisServiceImpl.java:73)
at com.shu2man.crawler.Crawler.doCrawl(Crawler.java:68)
at com.shu2man.crawler.CrawlManager$WorkTask.run(CrawlManager.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
그리고 이거.
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Connection reset
at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:202)
at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
at redis.clients.jedis.Protocol.process(Protocol.java:151)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getIntegerReply(Connection.java:265)
at redis.clients.jedis.Jedis.zadd(Jedis.java:1385)
at com.shu2man.service.RedisServiceImpl.zadd(RedisServiceImpl.java:73)
at com.shu2man.crawler.Crawler.doCrawl(Crawler.java:68)
at com.shu2man.crawler.CrawlManager$WorkTask.run(CrawlManager.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
좋 은 레 디 스 연결,한 조작 에 아무 문제 가 없 으 며,파충류 가 뛰 자마자 잘못 보고 합 니 다.
분석(추측)
글 의 첫 번 째 글 을 참고 하면 문 제 는 Redis 가 입력 흐름 을 사용자 정의 한 것 으로 보인다.파충류 프로그램 에서 여러 개의 스 레 드 가 달리 고 있 는데 여러 스 레 드 가 동시에 명령 을 보 낼 때 명령 이 혼 란 스 러 워 이상 을 초래 했다.
해결 하 다.
레 디 스 를 봉 인 했 기 때문에 봉 인 된 함 수 를 synchronized 로 수식 하면 상술 한 문 제 를 피 할 수 있 습 니 다.
synchronized 가 수식 하면 상기 문 제 를 피 할 수 있 지만 저 는 경험 에 따 르 면 많은 병발 이 높 은 상황 에서 명령 이 교차 하지 않 습 니 다.제 파충류 가 1 초 에 몇 십 여 개의 요 구 를 했 기 때문에 이 문 제 를 야기 하지 않 을 것 입 니 다.그러나 문 제 는 객관 적 으로 존재 하기 때문에 열심히 연구 해 야 합 니 다.
이상 의 문 제 는 개인 적 인 추측 분석 입 니 다.고견 이 있 으 면 아낌없이 가르쳐 주 십시오.댓 글 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.