最后更新:2022-07-05 08:47:29 手机定位技术交流文章
几乎所有主流编程语言都有Redis客户端(http://redis.io/clients),
如果从技术角度来看,雷迪斯之所以如此受欢迎有两个原因:
首先,客户端与服务端之间的通信协议是建立在TCP协议之上。
Redis设置RESP(REdis Serialization Protocol)实现器
家庭与服务端之间的正常交互,该协议简单高效,可由机器分析,方便
例如,根据RESP的数据,客户会向服务端发送一个“欢迎世界”命令
的标准,客户端需要将它封入下列格式(每行分隔为rn):
*3
$3
SET
$5
hello
$5
world
这允许雷迪斯服务器根据RESP来分析它作为设置问候世界命令,然后执行
回复的格式如下:
+OK
您可以看到,除了命令设置你好世界和返回结果本身的OK之外,它还包含
下面描述了一些特殊字符和数字。
1.发送命令格式
RESP下订单的格式如下: CRLF代表“rn”。
*< 参数数量 > CRLF
$< 参数 1 的字节数量 > CRLF
< 参数 1> CRLF
...
$< 参数 N 的字节数量 > CRLF
< 参数 N> CRLF
还是使用命令设置地狱世界来解释。
参数的数目是三,所以第一个行为是:
*3
数字的数目是355,所以以下的行为:
$3
SET
$5
hello
$5
world
要指出的一点是,上述只是格式化显示的结果,实际传输格式如下
代码,整个过程,如图4-1所示:
*3rn$3rnSETrn$5rnhellorn$5rnworldrn
2.返回结果格式
如图4-2所示,雷迪斯返回的结果有五个类型:
·国家回应: RESP的第一个字符是“+”。
错误响应: RESP的第一个字母是"-".
整数响应: RESP的第一个节点是“:”。
·字符串响应: RESP的第一个字符串是“$”。
多个字符串响应: RESP中的第一个字符串是“*”。


我们知道, redis-cli只能看到最后的执行结果,因为 redis-cli本身就是
结果分析是根据RESP进行的,所以你不能看到中间结果和 redis - cli.c源的命令
果的解析结构如下:
static sds cliFormatReplyTTY(redisReply *r, char *prefix) {
sds out = sdsempty();
switch (r->type) {
case REDIS_REPLY_ERROR:
//处理错误响应
case REDIS_REPLY_STATUS:
//处理状态响应
case REDIS_REPLY_INTEGER:
//处理整数响应
case REDIS_REPLY_STRING:
//进程字符串响应
case REDIS_REPLY_NIL:
// 处理空
case REDIS_REPLY_ARRAY:
//处理多个字符串响应
return out;
}
例如,如果您执行set hello world,返回的结果是OK,并且您不能看到添加:
127.0.0.1:6379> set hello world
OK
要看到Redis服务端返回的“真实”结果,你可以使用nc命令和 telnet命令
指示,甚至写,一个接口程序模拟。 下面是使用nc命令的演示,首先使用
nc79连接到Redis:
nc 127.0.0.1 6379
国家答复:集合世界欢迎的返回是+OK:
set hello world
+OK
错误响应:由于Sethx命令不存在,返回结果是"-"加误
误消息:
sethx
-ERR unknown command 'sethx'
整数响应:当执行命令结果为整数时,返回是一个整数响应,例如。
incr,exists,del,dbsize返回是整数,如incr计数返回
它是整数的加法:
incr counter
:1
字符串响应:当命令执行的结果是一个字符串时,返回的结果是一个字符串返回
例如, get, hget 返回是字符串,例如, get hello 返回
对于"$5rnworldrn":
get hello
$5
world
多个字符串响应:当命令执行结果是多个字符串时,返回结果是多个
例如,mget、hgetall、range等命令返回多个结果,如以下
操作:
首先使用mset来设置多个键对:
mset java jedis python redis-py
+OK
然后执行mget命令返回多个结果,第一个*2代表返回的数目,其次是
格式与字符串响应一致:
mget java python
*2
$5
jedis
$8
redis-py
有一件事要指出,无论是一个字符串响应还是多个字符串响应,如果有一个零
值, 然后返回$-1.
例如,如果在不存在的键上执行一个获取操作,结果是:
get not_exist_key
$-1
如果批量操作包含一个值为零的结果,则返回的结果如下:
mget hello not_exist_key java
*3
$5
world
$-1
$5
jedis
RESP为发送命令和返回结果提供协议格式,各种编程语言可以
为了使用它来实现相应的Redis客户端,下面两个节将介绍Java和Python编程
Redis语言的客户端。
本文由 在线网速测试 整理编辑,转载请注明出处。