可以通过 TCP 或 UDP 协议 与memcached服务器通信。使用 TCP 协议时,您可以使用简单的基于文本的界面来交换信息。
与memcached通信时,您可以使用为服务器配置的端口连接到服务器。您无需授权或登录即可打开与服务器的连接。连接后,您就可以开始向服务器发送命令。完成后,您可以终止连接而无需发送任何特定的断开连接命令。鼓励客户端保持连接打开以减少延迟并提高性能。
memcached数据以两种形式
发送到服务器:
文本行,用于向服务器发送命令,并接收来自服务器的响应。
非结构化数据,用于接收或发送给定键的值信息。数据以提供的格式返回给客户端。
文本行(命令和响应)和非结构化数据始终以字符串结尾\r\n。因为存储的数据可能包含这个序列,所以应该根据数据的长度(非结构化数据传输前客户端返回的)来判断数据的结束。
发送到服务器的命令根据其操作进行结构化:
存储命令:
set,add,replace,append,prepend,cas服务器的存储命令采用以下形式:
command key [flags] [exptime] length [noreply]或者在使用比较和交换 (cas) 时:
cas key [flags] [exptime] length [casunique] [noreply]在哪里:
command: 命令名称。set:根据键存储值add:如果密钥不存在,则将此值存储在密钥中replace:如果密钥已经存在,则将此值存储在密钥中append:将提供的值附加到指定键的值的末尾。不应使用 和flags参数 。exptimeprepend:将当前在缓存中的值附加到指定键提供的值的末尾。不应使用 和flags参数 。exptimecas:仅当提供的casunique匹配时,将指定的键设置为提供的值。如果自从我上次获取信息以来没有人更新过信息,这实际上相当于更改信息。
key: 钥匙。所有数据都使用特定的密钥存储。密钥不能包含控制字符或空格,并且最多可以包含 250 个字符。flags:操作的标志(作为整数)。memcached中的标志 是透明的。Memcached服务器忽略标志的内容。客户端可以使用它们来指示任何类型的信息。在 memcached 1.2.0 及更低版本中,该值是一个 16 位整数值。在 memcached 1.2.1 及更高版本中,该值是一个 32 位整数。exptime: 到期时间,或零表示没有到期。length:提供的值块的长度(以字节为单位),不包括终止\r\n字符。casunique:现有条目的唯一 64 位值。这用于与现有值进行比较。发布更新gets时使用命令 返回的值 。casnoreply:告诉服务器不要回复命令。
例如,要将值存储
abcdef到键xyzkey中,您可以使用:set xyzkey 0 0 6\r\nabcdef\r\n服务器的返回值是一行,指定状态或错误信息。有关详细信息,请参阅 表 16.3 “memcached 协议响应”。
检索命令:
get,gets检索命令采用以下形式:
get key1 [key2 .... keyn] gets key1 [key2 ... keyn]您可以为命令提供多个键,每个请求的键由空格分隔。
服务器以以下形式的信息行响应:
VALUE key flags bytes [casunique]在哪里:
key: 键名。flags:存储值时提供给内存缓存服务器的标志整数的值。bytes:存储值的大小(不包括终止\r\n字符序列)。casunique:标识项目的唯一 64 位整数。
信息行紧跟在值数据块之后。例如:
get xyzkey\r\n VALUE xyzkey 0 6\r\n abcdef\r\n如果您请求了多个密钥,则会为找到的每个密钥返回一个信息行和数据块。如果缓存中不存在请求的键,则不返回任何信息。
删除命令:
delete删除命令采用以下形式:
delete key [time] [noreply]在哪里:
key: 键名。time:客户端希望服务器拒绝add或replace命令此密钥的时间(以秒为单位)(或特定的 Unix 时间)。 在此期间,所有add、replace、get和命令都会失败。 操作成功。这段时间过后,密钥将被永久删除并接受所有命令。getsset如果未提供,则该值假定为零(立即删除)。
noreply:告诉服务器不要回复命令。
对该命令的响应要么
DELETED表明密钥已成功删除,要么NOT_FOUND表明找不到指定的密钥。递增/递减:
incr,decr递增和递减命令更改服务器内键的值,而无需执行单独的获取/设置序列。这些操作假定当前存储的值是一个 64 位整数。如果存储的值不是 64 位整数,则在应用递增或递减操作之前假定该值为零。
递增和递减命令采用以下形式:
incr key value [noreply] decr key value [noreply]在哪里:
key: 键名。value: 用作递增或递减值的整数。noreply:告诉服务器不要回复命令。
响应是:
NOT_FOUND: 找不到指定的密钥。value: 与指定键关联的新值。
假定值是无符号的。对于
decr操作,该值永远不会递减到 0 以下。对于incr操作,该值环绕 64 位最大值。统计命令:
stats该命令提供有关memcached实例
stats的当前状态及其存储的数据的详细统计信息 。统计命令采用以下形式:
STAT [name] [value]在哪里:
name:要返回的统计信息的可选名称。如果未指定,则返回一般统计信息。value:执行某些统计操作时要使用的特定值。
返回值是一个统计数据列表,格式如下:
STAT name value统计数据以一行结束,
END。有关详细信息,请参阅 第 16.2.4 节,“获取memcached统计信息”。
作为参考,下面提供了支持的不同命令及其格式的列表。
表 16.2 memcached 命令参考
| 命令 | 命令格式 |
|---|---|
set |
set key flags exptime length,set key flags
exptime length noreply |
add |
add key flags exptime length,add key flags
exptime length noreply |
replace |
replace key flags exptime length,replace
key flags exptime length noreply |
append |
append key length,append key length
noreply |
prepend |
prepend key length,prepend key length
noreply |
cas |
cas key flags exptime length casunique,cas
key flags exptime length casunique noreply |
get |
get key1 [key2 ... keyn] |
gets |
|
delete |
delete key, delete key noreply,
delete key expiry,delete key
expiry noreply |
incr |
incr key, incr key noreply,
incr key value,incr key value
noreply |
decr |
decr key, decr key noreply,
decr key value,decr key value
noreply |
stat |
stat, stat name,stat
name value |
当向服务器发送命令时,服务器的响应是下表中的设置之一。来自服务器的所有响应值都以以下方式终止
\r\n:
表 16.3 memcached 协议响应
| 细绳 | 描述 |
|---|---|
STORED |
值已成功存储。 |
NOT_STORED |
该值未存储,但不是因为错误。对于您要添加或更新值(如果存在)的命令(例如add和
replace),或者项目已设置为删除的命令。 |
EXISTS |
使用cas命令时,您尝试存储的项目已经存在并且自您上次检查后已被修改。 |
NOT_FOUND |
您尝试存储、更新或删除的项目不存在或已被删除。 |
ERROR |
您提交了一个不存在的命令名称。 |
CLIENT_ERROR errorstring |
输入行中有错误,详细信息包含在 中
errorstring。 |
SERVER_ERROR errorstring |
服务器中发生错误,导致无法返回信息。在极端情况下,服务器可能会在出现此错误后断开客户端。 |
VALUE keys flags length |
已找到请求的密钥,并返回指定 的存储key和
flags数据块length。 |
DELETED |
请求的密钥已从服务器中删除。 |
STAT name value |
一行统计数据。 |
END |
统计数据结束。 |