个性化阅读
专注于IT技术分析

Memcached-CAS命令

CAS的完整格式为”检查并设置”或”比较并交换”。如果自上次获取以来未更新数据, 则此命令用于设置数据。换句话说, 可以说CAS是一种存储数据的操作, 但前提是自从你上一次读取数据以来, 没有其他人更新过数据。此命令对于解决更新缓存数据时的竞争条件非常有用。

句法

set key flags exptime bytes unique_cas_key [noreply]
value

这里,

key:它是从Memcached存储和检索数据的密钥。

flags:标志是服务器与数据一起存储的32位无符号整数(由用户提供), 并在检索项目时随数据一起返回。

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 8
ERROR
cas nm 0 900 8 2
amandeep
NOT_FOUND
set nm 0 900 8
amandeep
STORED
gets nm
VALUE nm 0 8 1
amandeep
END
cas nm 0 900 4 2
deep
EXISTS
cas nm 0 900 4 1
deep
STORED
gets nm
VALUE nm 0 4 2
deep
END

Memcached服务器

Memcached CAS命令

Memcached客户端

Memcached CAS命令

使用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 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("nm", 900, "amandeep").isDone());

      // Get cas token from cache
      long castToken = mcc.gets("nm").cas;
      System.out.println("Cas token:"+castToken);

      // now set new data in memcached server
      System.out.println("Now set new data:"+mcc.cas("nm", castToken, 900, "deep"));
      System.out.println("Get from Cache:"+mcc.get("nm"));
   }
}

输出

Connection to server successfully
set status:true
Cas token: 3
Prepend to cache:OK
Get from Cache:deep

赞(2)
未经允许不得转载:srcmini » Memcached-CAS命令

评论 抢沙发

评论前必须登录!