Memcached - คำสั่ง CAS

CAS ย่อมาจาก Check-And-Set หรือ Compare-And-Swap MemcachedCASคำสั่งใช้เพื่อตั้งค่าข้อมูลหากไม่ได้รับการอัพเดตตั้งแต่การดึงข้อมูลครั้งล่าสุด หากคีย์ไม่มีอยู่ใน Memcached จะส่งคืนNOT_FOUND.

ไวยากรณ์

ไวยากรณ์พื้นฐานของ Memcached CAS คำสั่งดังแสดงด้านล่าง -

set key flags exptime bytes unique_cas_key [noreply]
value

คำสำคัญในไวยากรณ์เป็นไปตามที่อธิบายไว้ด้านล่าง

  • key - เป็นชื่อของคีย์ที่จัดเก็บและเรียกข้อมูลจาก Memcached

  • flags - เป็นจำนวนเต็ม 32 บิตที่ไม่ได้ลงนามที่เซิร์ฟเวอร์จัดเก็บพร้อมกับข้อมูลที่ผู้ใช้ให้มาและส่งคืนพร้อมกับข้อมูลเมื่อมีการเรียกค้นรายการ

  • exptime- เป็นเวลาหมดอายุเป็นวินาที 0 หมายถึงไม่ล่าช้า หากเวลาเปิดใช้งานนานกว่า 30 วัน Memcached จะใช้เป็นเวลาประทับ UNIX สำหรับการหมดอายุ

  • bytes- เป็นจำนวนไบต์ในบล็อกข้อมูลที่ต้องจัดเก็บ นี่คือความยาวของข้อมูลที่ต้องจัดเก็บใน Memcached

  • unique_cas_key - เป็นคีย์เฉพาะที่ได้รับจากคำสั่ง gets

  • noreply (optional) - เป็นพารามิเตอร์ที่แจ้งให้เซิร์ฟเวอร์ไม่ต้องตอบกลับใด ๆ

  • value- เป็นข้อมูลที่ต้องจัดเก็บ ข้อมูลจะต้องถูกส่งต่อในบรรทัดใหม่หลังจากดำเนินการคำสั่งด้วยตัวเลือกข้างต้น

เอาต์พุต

ผลลัพธ์ของคำสั่งดังแสดงด้านล่าง -

STORED
  • STORED บ่งบอกถึงความสำเร็จ

  • ERROR แสดงข้อผิดพลาดขณะบันทึกข้อมูลหรือไวยากรณ์ผิด

  • EXISTS แสดงว่ามีคนแก้ไขข้อมูล CAS ตั้งแต่การดึงข้อมูลครั้งล่าสุด

  • NOT_FOUND บ่งชี้ว่าไม่มีคีย์ในเซิร์ฟเวอร์ Memcached

ตัวอย่าง

ในการดำเนินการคำสั่ง CAS ใน Memcached คุณต้องได้รับโทเค็น CAS จากคำสั่ง Memcached gets

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 โดยใช้ Java Application

ในการรับข้อมูล CAS จากเซิร์ฟเวอร์ Memcached คุณต้องใช้ 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