关于通讯协议,见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)后,必须要等待回应到达之后才能发送下一个命令? 这样对客户端来说 效率是否低了点?
Il s'agit de la méthode de streaming TCP normale.
Votre « faible efficacité pour le client » n'est que votre fantasme, n'est-ce pas ? Existe-t-il des données pour étayer cela ? Sans aucune donnée pour l’étayer, peut-il être jugé correctement sur la base de sentiments subjectifs ?
Il y a aussi la relation entre l'efficacité et les affaires. D'une manière générale, ce n'est que lorsque l'efficacité ne soutient pas les affaires que vous commencerez à considérer les questions d'efficacité avant d'avoir fait quoi que ce soit. ? Déjà?
Un dernier ajout. . Il s'agit de la définition du protocole TCP. Si quelque chose n'est pas clair, http://en.wikipedia.org/wiki/Transmission_Control_Protocol allez ici pour en savoir plus sur la spécification TCP. .
Peut-être que cette question devient : Redis ne peut-il envoyer qu'une seule commande dans une seule requête ? Ce sera mieux
Conclusion : Quel que soit le protocole de requête Redis utilisé, l'envoi de plusieurs commandes en une seule requête est pris en charge
Protocole de requête Redis
Format de protocole de requête Redis non standard (également appelé Inline) :
Format standard du protocole de requête Redis :
Ainsi, lorsque nous devons définir la valeur du nom de clé sur diaocow, nous pouvons utiliser les deux formats de protocole ci-dessus (les lecteurs intéressés peuvent utiliser la commande telnet ou nc pour le tester eux-mêmes)
Comment le protocole de requête Redis prend-il en charge l'exécution par lots ? (C'est ce que tout le monde appelle souvent le mode pipeline)
Par exemple, je dois exécuter les deux commandes suivantes par lots :
définir le nom diaocow
définir le pays Chine
Ensuite, les données d'une requête ressembleront à ceci (en supposant que nous utilisons le protocole standard) : *3rn$3rnsetrn$4rnnamern$7rndiaocowrn*3rn$3rnsetrn$7rncountryrn$5rnchinarn
Ensuite, dans Redis, il sera analysé comme ceci, pseudo-code :
parseCommandInfo sera analysé selon différents protocoles : si le premier octet est '*', le protocole standard sera utilisé
Remarques : Tous les clients Redis implémentent la fonction d'envoi de commandes par lots, ce qui n'est rien de plus que l'envoi de plusieurs commandes à Redis selon le format que nous venons de mentionner. Les lecteurs intéressés peuvent se référer à la langue que vous utilisez. familier avec le Client