- Memcached 基础
- Memcached - 首页
- Memcached - 概述
- Memcached - 环境
- Memcached - 连接
- Memcached 存储命令
- Memcached - 设置数据
- Memcached - 添加数据
- Memcached - 替换数据
- Memcached - 追加数据
- Memcached - 前置数据
- Memcached - CAS
- Memcached 获取命令
- Memcached - 获取数据
- Memcached - 获取 CAS 数据
- Memcached - 删除键
- Memcached - 删除数据
- Memcached - 自增/自减
- Memcached 统计命令
- Memcached - 统计
- Memcached - 项目统计
- Memcached - Slab 统计
- Memcached - 大小统计
- Memcached - 清除数据
- Memcached 有用资源
- Memcached - 快速指南
- Memcached - 有用资源
- Memcached - 讨论
Memcached - CAS 命令
CAS 代表检查并设置 (Check-And-Set) 或比较并交换 (Compare-And-Swap)。Memcached 的 CAS 命令用于在数据自上次获取以来未更新的情况下设置数据。如果 Memcached 中不存在该键,则返回 NOT_FOUND。
语法
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 (可选) − 它是一个参数,通知服务器不要发送任何回复。
value − 它是需要存储的数据。在使用上述选项执行命令后,需要在新行上传递数据。
输出
命令的输出如下所示:
STORED
STORED 表示成功。
ERROR 表示保存数据时出错或语法错误。
EXISTS 表示自上次获取以来有人修改了 CAS 数据。
NOT_FOUND 表示 Memcached 服务器中不存在该键。
示例
要在 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
使用 Java 应用程序的 CAS
要从 Memcached 服务器获取 CAS 数据,您需要使用 Memcached 的 gets 方法。
示例
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")); } }
输出
编译并执行程序后,您将看到以下输出:
Connection to server successful set status:true Cas token:3 Now set new data:OK Get from Cache:redis
广告