CAS的完整格式为”
检查并设置”
或”
比较并交换”
。如果自上次获取以来未更新数据, 则此命令用于设置数据。换句话说, 可以说CAS是一种存储数据的操作, 但前提是自从你上一次读取数据以来, 没有其他人更新过数据。此命令对于解决更新缓存数据时的竞争条件非常有用。
句法
set key flags exptime bytes unique_cas_key [noreply]value
这里,
key:它是从Memcached存储和检索数据的密钥。
flags:标志是服务器与数据一起存储的32位无符号整数(由用户提供), 并在检索项目时随数据一起返回。
【Memcached-CAS命令】exptime:exptime是到期时间, 以秒为单位。 0表示没有延迟。如果超过30天, Memcached会将其用作UNIX时间戳记过期。
bytes:字节是数据块中需要存储的字节数。这是存储在Memcached中的数据的长度。
Unique_cas_key:这是唯一键, 可从gets命令获取。
noreply:这是一个可选参数。它用于通知服务器不发送任何答复。
值:值是必须存储的数据。使用上述选项执行命令后, 需要在新行中传递数据。
返回值
此命令将返回以下值:
- 存储:存储意味着成功
- 错误:显示保存数据或错误语法时的错误。
- 存在:它表明自上次获取以来有人修改了CAS数据。
- NOT_FOUND:它表明该密钥在Memcached服务器中不存在。
要在Memcached中执行CAS命令, 我们必须从Memcached gets命令获取CAS令牌。
让我们来看一个例子:
cas nm 0 900 8ERRORcas nm 0 900 8 2amandeepNOT_FOUNDset nm 0 900 8amandeepSTOREDgets nmVALUE nm 0 8 1amandeepENDcas nm 0 900 4 2deepEXISTScas nm 0 900 4 1deepSTOREDgets nmVALUE nm 0 4 2deepEND
Memcached服务器
文章图片
Memcached客户端
文章图片
使用Java应用程序的CAS 考虑Memcached服务器正在主机127.0.0.1和端口11211.v上运行。在这里, 我们将使用gets()方法在memcached服务器中添加数据。
例子
import net.spy.memcached.MemcachedClient;
public class MemcachedJava {public static void main(String[] args) {// Connecting to Memcached server on localhostMemcachedClient mcc = new MemcachedClient(newInetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server successful");
System.out.println("set status:"+mcc.set("nm", 900, "amandeep").isDone());
// Get cas token from cachelong castToken = mcc.gets("nm").cas;
System.out.println("Cas token:"+castToken);
// now set new data in memcached serverSystem.out.println("Now set new data:"+mcc.cas("nm", castToken, 900, "deep"));
System.out.println("Get from Cache:"+mcc.get("nm"));
}}
输出
Connection to server successfullyset status:trueCas token: 3Prepend to cache:OKGet from Cache:deep
推荐阅读
- Memcached-获取CAS数据
- 如何在Memcached中前置数据
- 如何在Memcached中添加数据
- Ubuntu中Memcached的示例
- 在Ubuntu上安装Memcached
- 如何在Memcached中设置数据
- Memcached教程介绍