Memcached - CAS Command


Advertisements

CAS stands for Check-And-Set or Compare-And-Swap. Memcached CAS command is used to set the data if it is not updated since last fetch. If the key does not exist in Memcached, then it returns NOT_FOUND.

Syntax

The basic syntax of Memcached CAS command is as shown below −

set key flags exptime bytes unique_cas_key [noreply]
value

The keywords in the syntax are as described below−

  • key − It is the name of the key by which data is stored and retrieved from Memcached.

  • flags − It is the 32-bit unsigned integer that the server stores with the data provided by the user, and returns along with the data when the item is retrieved.

  • exptime − It is the expiration time in seconds. 0 means no delay. If exptime is more than 30 days, Memcached uses it as a UNIX timestamp for expiration.

  • bytes − It is the number of bytes in the data block that needs to be stored. This is the length of the data that needs to be stored in Memcached.

  • unique_cas_key − It is the unique key get from gets command.

  • noreply (optional) − It is a parameter that informs the server not to send any reply.

  • value − It is the data that needs to be stored. Data needs to be passed on new line after executing the command with the above options.

Output

The output of the command is as shown below −

STORED
  • STORED indicates success.

  • ERROR indicates error while saving data or wrong syntax.

  • EXISTS indicates that someone has modified the CAS data since last fetch.

  • NOT_FOUND indicates that the key does not exist in the Memcached server.

Example

To execute a CAS command in Memcached, you need to get a CAS token from the Memcached gets command.

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

To get CAS data from a Memcached server, you need to use Memcached gets method.

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("howcodex", 900, "memcached").isDone());

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

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

Output

On compiling and executing the program, you get to see the following output −

Connection to server successful
set status:true
Cas token:3
Now set new data:OK
Get from Cache:redis
Advertisements