在Memcached这个开源项目的介绍中,有对常见命令的一个详细介绍。链接如下:https://github.com/memcached/memcached/wiki/Commands。
为方便说明,这里将Memcached中常见命令截图如下:
本文对Memcached中几种常见的命令进行一个简要的说明。
1)存储命令,例如:set/add/replace等等。
这些命令用来指示服务器存储一些由键值标识的数据。客户端发送一行数据,后面跟着数据区块;然后,客户端等待接收由服务器回传的命令行(指示数据存储成功与否)。
命令格式如下:
2)读取命令,例如:get/gets等
这些命令指示服务器返回与所给键值相符合的数据(一个请求中可以有一个或多个键值)。客户端发送一行命令,包括所有请求的键值;服务器每找到一项内容,都会发送回客户端议案红关于这项内容的信息,紧跟着是对应的数据区块;直到服务器以一行”END”回应命令结束。
命令格式如下:
这里要说明一下get和gets命令的区别
官方文档给予的介绍是这样说的:
An alternative get command for using with CAS. Returns a CAS identifier (a unique 64bit number) with the item. Return this value with the cas command. If the item’s CAS value has changed since you gets’ed it, it will not be stored.
简单翻译为:gets是一个使用了CAS用来替代get的命令。它会返回一个CAS标识符(是一个64bit唯一的数)。如果item的CAS值在你获取之后发生了变化,则不会存储。
前半句比较好理解,看如下的例子
可以看到此处gets比普通的get多返回一个数字,这个数字可以用作检查数据是否发生改变。当key对应的数据改变的时候,该数会发生改变,如下图所示。
gets命令官方介绍的后半句是:如果item的CAS值在你获取之后发生了变化,则不会存储。这是什么意思呢?
看如下这个例子,你就明白了。
cas就是“Compare And Set”的含义,只有当最后一个参数与gets所获取的参数一样时,才能被存储,否则返回“EXISTS”。这种设计的意图是防止使用经过改变了的键值对。
在并发中,这种方法就很有用。如果一个线程对一个value进行了修改,则与此同时也正在修改的线程将会修改失败。
3)状态命令,例如:stats/stats items等
这些命令被用于查询服务器的运行状态和其它内部数据。
4)其它命令,例如:flush_all/quit等