关于通讯协议,见https://redis.readthedocs.org/en/latest/topic/protocol.html
1)命令 set mykey myvalue 对应 要发送到Redis的字符串(要转化为二进制数据)是
"*3\r\n$3\r\nset\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"
2)命令 get mykey 对应字符串是 "*2\r\n$3\r\nget\r\n$5\r\nmykey\r\n"
3)最后得到Redis发回的响应是 "+OK\r\n$7\r\nmyvalue\r\n"
我的问题是,Redis这样的响应格式,是否意味者 客户端发完命令(需要得到返回
值的命令如get)后,必须要等待回应到达之后才能发送下一个命令? 这样对客户端来说 效率是否低了点?
일반적인 TCP 스트리밍 방식입니다.
'클라이언트에 대한 낮은 효율성'은 단지 환상일 뿐이죠? 이를 뒷받침하는 데이터가 있나요? 이를 뒷받침할 아무런 데이터도 없이 주관적인 느낌으로 정확하게 판단할 수 있을까요?
효율성과 비즈니스 사이에도 관계가 있습니다. 일반적으로 효율성이 비즈니스를 지원하지 않는 경우에만 효율성 문제를 고려하기 시작합니까? ? 이미?
마지막 추가사항입니다. . 이것이 tcp 프로토콜의 정의입니다. 불분명한 점이 있으면 http://en.wikipedia.org/wiki/Transmission_Control_Protocol 여기로 가서 tcp 사양에 대해 알아보세요. .
이 질문은 다음과 같습니다. Redis는 요청 하나에 명령 하나만 보낼 수 있나요? 더 좋아질 거예요
결론: 어떤 redis 요청 프로토콜을 사용하든 관계없이 하나의 요청으로 여러 명령을 보내는 것이 지원됩니다
redis 요청 프로토콜
비표준 Redis 요청 프로토콜 형식(인라인이라고도 함):
표준 Redis 요청 프로토콜 형식:
따라서 키 이름 값을 diaocow로 설정해야 할 경우 위의 두 가지 프로토콜 형식을 사용할 수 있습니다(관심 있는 독자는 telnet 또는 nc 명령을 사용하여 테스트할 수 있습니다)
Redis 요청 프로토콜은 일괄 실행을 어떻게 지원하나요? (이것을 흔히 파이프라인 모드라고 부릅니다.)
예를 들어 다음 두 명령을 일괄 실행해야 합니다.
설정 이름 diaocow
국가를 중국으로 설정
그러면 요청의 데이터는 다음과 같습니다(표준 프로토콜을 사용한다고 가정). *3rn$3rnsetrn$4rnnamern$7rndiaocown*3rn$3rnsetrn$7rncountryrn$5rnchinarn
그런 다음 Redis 내부에서는 다음과 같이 의사 코드로 구문 분석됩니다.
으아아아parseCommandInfo는 다양한 프로토콜에 따라 구문 분석됩니다. 첫 번째 바이트가 '*'인 경우 표준 프로토콜이 사용됩니다.
설명: 모든 Redis 클라이언트는 일괄적으로 명령을 보내는 기능을 구현합니다. 이는 방금 언급한 형식에 따라 Redis에 여러 명령을 보내는 것에 지나지 않습니다. 클라이언트