Memcached-CAS命令

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-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 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

    推荐阅读