- 11
- 0
- 约7.98千字
- 约 8页
- 2017-06-05 发布于河南
- 举报
Memcached通讯协议
Memcache 通信协议
(注:memcachedv1.3 以前的版本使用的是基于文本行的协议,到v1.3 及以后的版本开
始使用基于二进制的协议了。)
1 协议
memcached 的客户端通过TCP 连接与服务器通信(UDP 协议的接口也可以使用
详细说明请参考”UDP 协议”部分)。一个给定的运行中的 memcached 服务器在某个
(可配置的)端口上监听连接;客户端连接该端口,发送命令给服务器,读取反馈,最后
关闭连接。
没有必要发送一个专门的命令去结束会话。客户端可以在不需要该连接的时候就关闭
它。注意:我们鼓励客户端缓存它们与服务器的连接,而不是每次要存储或读取数据的时
候再次重新建立与服务器的连接。memcache 同时打开很多连接不会对性能造成到大的
影响,这是因为 memcache 在设计之初,就被设计成即使打开了很多连接(数百或者需
要时上千个连接)也可以高效的运行。缓存连接可以节省与服务器建立 TCP 连接的时间开
销(与此相比,在服务器端为建立一个新的连接所做准备的开销可以忽略不计)。
memcache 通信协议有两种类型的数据:文本行和非结构化数据。文本行用来发送
从客户端到服务器的命令以及从服务器回送的反馈信息。非结构化的数据用在客户端希望
存储或者读取数据时。服务器会以字符流的形式严格准确的返回相应数据在存储时存储的
数据。服务器不关注字节序,它也不知道字节序的存在。memcahce 对非结构化数据中
的字符没有任何限制,可以是任意的字符,读取数据时,客户端可以在前次返回的文本行
中确切的知道接下来的数据块的长度。
文本行通常以“\r\n”结束。非结构化数据通常也是以“\r\n”结束,尽管\r、
\n 或者其他任何 8 位字符可以出现在数据块中。所以当客户端从服务器读取数据时,必须
使用前面提供的数据块的长度,来确定数据流的结束,而不是依据跟随在字符流尾部的
“\r\n”来确定数据流的结束,尽管实际上数据流格式如此。
2 关键字 Keys
memcached 使用关键字来区分存储不同的数据。关键字是一个字符串,可以唯一标
识一条数据。当前关键字的长度限制是 250 个字符(当然目前客户端似乎没有需求用这么
长的关键字);关键字一定不能包含控制字符和空格。
3 命令 Commands
memcahe 有 3 种类型的命令:
存储命令— (3 个命令:set、add 和 replace)要求服务器安装关键字存储数
据。客户端发送一个命令行,然后一个数据块;命令执行后客户端等待一行反馈
用来表示命令执行成功与否。
读取命令-- (只有1 个命令:get)要求服务器根据一组关键字读取数据(在
一个请求总可以包含一个或多个关键字)。客户端发送一个包含请求关键字的命
令行;命令传递到服务器后,服务器就查找每一个关键字下的数据,然户将数据
以“一个关键字数据,一个反馈信息行跟着一个数据块”的格式回送数据,直到
服务器发送“END”的反馈行。
其他命令,如 flush_all version 等。这些命令不使用非结构化的数据。对于
这些命令,客户端发送一个文本的命令行,根据命令的特性等待一行数据或者在
最后一行以“END “结尾的几行反馈信息。
所有的命令行总是以命令的名字开始,紧接着是以空格分割的参数。命令名称都是小
写,并且是大小写敏感的。
4 超时时间 Expiration times
一些发送到服务器的命令包含超时时间(该超时时间对应于:数据项保存时间;客户
端操作限时)。在这些例子中,被发送的真实时间要么是 UNIX 时间戳(自 1970 年 1 月
1 日零时起的秒数数值),或者从当前时间开始算起的秒数。对于后一种情况,秒数的数
值不能超过 60*60*24*30 (30 天的秒数);如果秒数的数值大于了这个数值,服务器
会认为该数值是 UNIX 时间戳,而不是自当前时间开始的秒数偏移值。
5 错误信息 Error strings
每个命令都有可能被反馈以一个错误消息。这些错误消息有以下三个类型:
“ERROR\r\n”
意味着客户端发送了一个在协议中不存在的命令。
CLIENT_ERROR error\r\n
表示客户端输入
原创力文档

文档评论(0)