memcache协议(二)
“END\r\n”来指示回应完毕。服务器用以下形式发送每项内容:VALUE
\r\n-
–
–
– “NOT_FOUND\r\n”指示该项内容的值,不存在。-
注意”decr”命令发生下溢:如果客户端尝试减少的结果小于0时,结果会是0。”incr” 命令不会发生溢出。状态
命令”stats” 被用于查询服务器的运行状态和其他内部数据。有两种格式。不带参数的:
stats\r\n这会在随后输出各项状态、设定值和文档。另一种格式带有一些参数:
stats
在“类型”一列中,”32u”表示32位无符号整型,”64u”表示64位无符号整型,”32u:32u”表示用冒号隔开的两个32位无符号整型。 名称/Name 类型/Type 含义/Meaning pid 32u 服务器进程ID Process id of this server process uptime 32u 服务器运行时间,单位秒 Number of seconds this server has been running time 32u 服务器当前的UNIX时间 current UNIX time according to the server version string 服务器的版本号 Version string of this server rusage_user 32u:32u 该进程累计的用户时间
(秒:微妙) Accumulated user time for this process
(seconds:microseconds) rusage_system 32u:32u 该进程累计的系统时间
(秒:微妙) Accumulated system time for this process
(seconds:microseconds) curr_items 32u 服务器当前存储的内容数量 Current number of items stored by the server total_items 32u 服务器启动以来存储过的内容总数 Total number of items stored by this server
ever since it started bytes 64u 服务器当前存储内容所占用的字节数 Current number of bytes used by this server
to store items curr_connections 32u 连接数量 Number of open connections total_connections 32u 服务器运行以来接受的连接总数 Total number of connections opened since
the server started running connection_structures 32u 服务器分配的连接结构的数量 Number of connection structures allocated
by the server cmd_get 32u 取回请求总数 Cumulative number of retrieval requests cmd_set 32u 存储请求总数 Cumulative number of storage requests get_hits 32u 请求成功的总次数 Number of keys that have been requested and
found present get_misses 32u 请求失败的总次数 Number of items that have been requested
and not found bytes_read 64u 服务器从网络读取到的总字节数 Total number of bytes read by this server
from network bytes_written 64u 服务器向网络发送的总字节数 Total number of bytes sent by this server to
network limit_maxbytes 32u 服务器在存储时被允许使用的字节总数 Number of bytes this server is allowed to
use for storage. 其它命令
“flush_all”命令有一个可选的数字参数。它总是执行成功,服务器会发送“OK\r\n”回应。它的效果是使已经存在的项目立即失效(缺省),或在指定的时间后。此后执行取回命令,将不会有任何内容返回(除非重新存储同样的键名)。flush_all 实际上没有立即释放项目所占用的内存,而是在随后陆续有新的项目被储存时执行。flush_all 效果具体如下:它导致所有更新时间早于flush_all所设定时间的项目,在被执行取回命令时命令被忽略。
在回应中,服务器发送:”VERSION
当来自客户端的连接数远大于TCP连接的上限时,可以使用基于UDP的接口。UDP接口不能保证传输到位,所以只有在不要求成功的操作中使用;比如被用于一个“get”请求时,会因不当的缓存处理而发生错误或回应有遗失。每个UDP数据包都包含一个简单的帧头,数据之后的内容与TCP协议的描述类似。在执行所产生的数据流中,请求必须被包含在单独的一个UDP数据包中,但是回应可能跨越多个数据包。(只有“get”和“set”请求例外,跨越了多个数据包)帧头有8字节长,如下(均由16位整数组成,网络字节顺序,高位在前):
- 0-1 请求ID
- 2-3 序号
- 4-5 该信息的数据包总数
- 6-7 保留位,必须为0
请求ID有客户端提供。一般它会是一个从随机基数开始的递增值,不过客户端想用什么样的请求ID都可以。服务器的回应会包含一个和请求中的同样的ID。客户端使用请求ID来区分每一个回应。任何一个没有请求ID的数据包,可能是之前的请求遭到延迟而造成的,应该被丢弃。序号的返回是从0到n-1,n是该条信息的数据包数量。