Redis 通讯协议的疑问
怪我咯
怪我咯 2017-04-21 10:57:48
0
3
617

关于通讯协议,见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)后,必须要等待回应到达之后才能发送下一个命令? 这样对客户端来说 效率是否低了点?

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(3)
左手右手慢动作

일반적인 TCP 스트리밍 방식입니다.

阿神

'클라이언트에 대한 낮은 효율성'은 단지 환상일 뿐이죠? 이를 뒷받침하는 데이터가 있나요? 이를 뒷받침할 아무런 데이터도 없이 주관적인 느낌으로 정확하게 판단할 수 있을까요?

효율성과 비즈니스 사이에도 관계가 있습니다. 일반적으로 효율성이 비즈니스를 지원하지 않는 경우에만 효율성 문제를 고려하기 시작합니까? ? 이미?

마지막 추가사항입니다. . 이것이 tcp 프로토콜의 정의입니다. 불분명한 점이 있으면 http://en.wikipedia.org/wiki/Transmission_Control_Protocol 여기로 가서 tcp 사양에 대해 알아보세요. .

迷茫

이 질문은 다음과 같습니다. Redis는 요청 하나에 명령 하나만 보낼 수 있나요? 더 좋아질 거예요

결론: 어떤 redis 요청 프로토콜을 사용하든 관계없이 하나의 요청으로 여러 명령을 보내는 것이 지원됩니다


redis 요청 프로토콜

비표준 Redis 요청 프로토콜 형식(인라인이라고도 함):

명령어 이름 매개변수 1 매개변수 2 ... 매개변수 N

설정 이름 diaocow

표준 Redis 요청 프로토콜 형식:

*<매개변수 개수>CR LF
$CR LF <파라미터 1의 데이터>CR LF
...
$<파라미터 N의 바이트 수>CR LF
<매개변수 N의 데이터>CR LF

*3rn$3rnsetrn$4rnnamern$7rndiaocown

따라서 키 이름 값을 diaocow로 설정해야 할 경우 위의 두 가지 프로토콜 형식을 사용할 수 있습니다(관심 있는 독자는 telnet 또는 nc 명령을 사용하여 테스트할 수 있습니다)

Redis 요청 프로토콜은 일괄 실행을 어떻게 지원하나요? (이것을 흔히 파이프라인 모드라고 부릅니다.)

예를 들어 다음 두 명령을 일괄 실행해야 합니다.

  1. 설정 이름 diaocow

  2. 국가를 중국으로 설정

그러면 요청의 데이터는 다음과 같습니다(표준 프로토콜을 사용한다고 가정). *3rn$3rnsetrn$4rnnamern$7rndiaocown*3rn$3rnsetrn$7rncountryrn$5rnchinarn

그런 다음 Redis 내부에서는 다음과 같이 의사 코드로 구문 분석됩니다.

으아아아

parseCommandInfo는 다양한 프로토콜에 따라 구문 분석됩니다. 첫 번째 바이트가 '*'인 경우 표준 프로토콜이 사용됩니다.

설명: 모든 Redis 클라이언트는 일괄적으로 명령을 보내는 기능을 구현합니다. 이는 방금 언급한 형식에 따라 Redis에 여러 명령을 보내는 것에 지나지 않습니다. 클라이언트

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿