Memcached 简明教程
Memcached - CAS Command
CAS 代表 Check-And-Set 或 Compare-And-Swap。Memcached CAS 命令用于在数据自上次获取以来未更新时设置数据。如果密钥不存在于 Memcached 中,则它返回 NOT_FOUND 。
Syntax
Memcached CAS 命令的基本语法如下所示 −
set key flags exptime bytes unique_cas_key [noreply]
value
语法中的关键字的说明如下−
-
key :这是数据在 Memcached 中存储和从中检索的键的名称。
-
flags :它是一个 32 位无符号整数,服务器与用户提供的数据一起存储该整数,并在检索该项时与该数据一同返回。
-
exptime − 是以秒计的过期时间。0 表示无延迟。如果 exptime 超过 30 天,则 Memcached 会将其用作过期的 UNIX 时间戳。
-
bytes :它是需要存储的数据块中的字节数。这是需要存储在 Memcached 中的数据长度。
-
unique_cas_key − 从 gets 命令中获得的唯一密钥。
-
noreply (optional) − 是通知服务器不发送任何回复的参数。
-
value − 需要存储的数据。在使用上述选项执行命令后,数据需要传递到新行上。
Output
命令的输出如下所示:
STORED
-
STORED indicates success.
-
ERROR 指示保存数据或语法错误时出错。
-
EXISTS 指示自上次获取以来有人修改了 CAS 数据。
-
NOT_FOUND 指示密钥不存在于 Memcached 服务器中。
Example
要在 Memcached 中执行 CAS 命令,你需要从 Memcached gets 命令中获取 CAS 令牌。
cas tp 0 900 9
ERROR
cas tp 0 900 9 2
memcached
set tp 0 900 9
memcached
STORED
gets tp
VALUE tp 0 9 1
memcached
END
cas tp 0 900 5 2
redis
EXISTS
cas tp 0 900 5 1
redis
STORED
get tp
VALUE tp 0 5
redis
END
CAS Using Java Application
要从 Memcached 服务器中获取 CAS 数据,你需要使用 Memcached gets 方法。
Example
import net.spy.memcached.MemcachedClient;
public class MemcachedJava {
public static void main(String[] args) {
// Connecting to Memcached server on localhost
MemcachedClient mcc = new MemcachedClient(new
InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server successful");
System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").isDone());
// Get cas token from cache
long castToken = mcc.gets("tutorialspoint").cas;
System.out.println("Cas token:"+castToken);
// now set new data in memcached server
System.out.println("Now set new data:"+mcc.cas("tutorialspoint",
castToken, 900, "redis"));
System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
}
}