Memcached cas命令

Memcached cas命令

Memcached 的 cas 命令用于执行一个 “检查并设置” 的操作,它仅在当前客户端最后一次取值后,该 key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。

检查是通过 cas_token 参数进行的, 这个参数是 Memcach 指定给已经存在的元素的一个唯一的 64 位值。

Memcached cas命令详解

语法

cas key flags exptime bytes unique_cas_token [noreply] value

参数

参数 描述
key 键值 key-value 结构中的 key,用于查找缓存值。
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
exptime 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)。
bytes 在缓存中存储的字节数。
unique_cas_token 通过 gets 命令获取的一个唯一的 64 位值。
noreply(可选) 该参数告知服务器不需要返回数据。
value 存储的值(始终位于第二行)(可直接理解为 key-value 结构中的 value)。

返回值

返回值 描述
STORED 保存成功后的输出。
ERROR 保存出错或语法错误。
EXISTS 在最后一次取值后另外一个用户也在更新该数据。
NOT_FOUND Memcached 服务上不存在该键值。

案例

我们首先,使用如下命令,启动 Memcached,具体命令如下:

memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid

启动完毕后,如下图所示:

35_memcached cas命令.png

现在,我们已经成功启动了 Memcached,我们可以使用 telnet 客户端连接它,具体命令如下:

telnet 127.0.0.1 11211

连接成功后,如下图所示:

36_memcached cas命令.png

现在,我们首先,使用 set 命令添加一个数据,具体命令如下:

set haicoder 0 120 12 haicoder.net

执行完毕后,此时,如下图所示:

37_memcached cas命令.png

我们看到,此时,我们已经成功设置了数据,现在,我们取出存储的数据,具体命令如下:

gets haicoder

执行完毕后,如下图所示:

38_memcached cas命令.png

我们看到,我们已经成功设置了数据并且获取到了数据。现在,我们再次使用 cas 命令,更新数据,具体命令如下:

cas haicoder 0 120 9 17 memcached

执行完毕后,如下图所示:

39_memcached cas命令.png

现在,我们再次使用 get 命令,获取值,具体命令如下:

get haicoder

执行完毕后,如下图所示:

40_memcached cas命令.png

我们看到,此时,键 haicoder 所对应的值已经被成功更新了。

Memcached cas命令总结

Memcached 的 cas 命令用于执行一个 “检查并设置” 的操作,它仅在当前客户端最后一次取值后,该 key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。