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