Memcached - คู่มือฉบับย่อ

Memcached เป็นระบบแคชหน่วยความจำแบบกระจายโอเพ่นซอร์สประสิทธิภาพสูงที่มีจุดมุ่งหมายเพื่อเร่งความเร็วแอปพลิเคชันเว็บแบบไดนามิกโดยลดภาระฐานข้อมูล เป็นพจนานุกรมคีย์ - ค่าของสตริงอ็อบเจ็กต์ ฯลฯ ที่จัดเก็บไว้ในหน่วยความจำซึ่งเกิดจากการเรียกฐานข้อมูลการเรียก API หรือการแสดงผลเพจ

Memcached ได้รับการพัฒนาโดย Brad Fitzpatrick สำหรับ LiveJournal ในปี 2546 อย่างไรก็ตามขณะนี้ Netlog, Facebook, Flickr, Wikipedia, Twitter และ YouTube ใช้ร่วมกัน

คุณสมบัติที่สำคัญของ Memcached มีดังนี้ -

  • เป็นโอเพ่นซอร์ส

  • เซิร์ฟเวอร์ Memcached เป็นตารางแฮชขนาดใหญ่

  • ช่วยลดภาระฐานข้อมูลได้อย่างมาก

  • มีประสิทธิภาพอย่างสมบูรณ์แบบสำหรับเว็บไซต์ที่มีการโหลดฐานข้อมูลสูง

  • เผยแพร่ภายใต้ใบอนุญาต Berkeley Software Distribution (BSD)

  • เป็นแอปพลิเคชันไคลเอนต์เซิร์ฟเวอร์ผ่าน TCP หรือ UDP

Memcached ไม่ใช่ -

  • ที่เก็บข้อมูลถาวร

  • ฐานข้อมูล

  • application-specific

  • แคชวัตถุขนาดใหญ่

  • ทนต่อความผิดพลาดหรือพร้อมใช้งานสูง

การติดตั้ง Memcached บน Ubuntu

ในการติดตั้ง Memcached บน Ubuntu ให้ไปที่เทอร์มินัลแล้วพิมพ์คำสั่งต่อไปนี้ -

$sudo apt-get update
$sudo apt-get install memcached

ยืนยันการติดตั้ง Memcached

เพื่อยืนยันว่ามีการติดตั้ง Memcached หรือไม่คุณต้องเรียกใช้คำสั่งที่ระบุด้านล่าง คำสั่งนี้แสดงว่า Memcached กำลังทำงานบนพอร์ตเริ่มต้น11211.

$ps aux | grep memcached

ในการรันเซิร์ฟเวอร์ Memcached บนพอร์ตอื่นให้รันคำสั่งที่ระบุด้านล่าง คำสั่งนี้เริ่มต้นเซิร์ฟเวอร์บนพอร์ต TCP 11111 และฟังบนพอร์ต UDP 11111 เป็นกระบวนการดีมอน

$memcached -p 11111 -U 11111 -u user -d

คุณสามารถเรียกใช้เซิร์ฟเวอร์ Memcached ได้หลายอินสแตนซ์ผ่านการติดตั้งเพียงครั้งเดียว

Memcached Java Environment Setup

ในการใช้ Memcached ในโปรแกรม Java ของคุณคุณต้องดาวน์โหลด spymemcached-2.10.3.jar และตั้งค่า jar นี้ลงใน classpath

ในการเชื่อมต่อกับเซิร์ฟเวอร์ Memcached คุณต้องใช้คำสั่ง telnet กับชื่อ HOST และ PORT

ไวยากรณ์

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

$telnet HOST PORT

ที่นี่ HOST และ PORT คือ IP ของเครื่องและหมายเลขพอร์ตตามลำดับซึ่งเซิร์ฟเวอร์ Memcached กำลังเรียกใช้งาน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีการเชื่อมต่อกับเซิร์ฟเวอร์ Memcached และดำเนินการชุดง่ายๆและรับคำสั่ง สมมติว่าเซิร์ฟเวอร์ Memcached กำลังรันบนโฮสต์ 127.0.0.1 และพอร์ต 11211

$telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
// now store some data and get it from memcached server
set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END

การเชื่อมต่อจาก Java Application

ในการเชื่อมต่อเซิร์ฟเวอร์ Memcached จากโปรแกรม java ของคุณคุณต้องเพิ่ม jar Memcached ลงใน classpath ของคุณตามที่แสดงในบทก่อนหน้า สมมติว่าเซิร์ฟเวอร์ Memcached กำลังรันบนโฮสต์ 127.0.0.1 และพอร์ต 11211 -

ตัวอย่าง

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 sucessfully");
      
      //not set data into memcached server
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      //Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:memcached.

เทอร์มินัลอาจแสดงข้อความให้ข้อมูลน้อยเกินไปซึ่งสามารถเพิกเฉยได้

Memcached set คำสั่งใช้เพื่อตั้งค่าใหม่ให้กับคีย์ใหม่หรือคีย์ที่มีอยู่

ไวยากรณ์

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

set key flags exptime bytes [noreply] 
value

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

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

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

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

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

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

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

เอาต์พุต

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

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

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

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราใช้ tutorialspoint เป็นคีย์และตั้งค่า Memcached ในนั้นโดยมีเวลาหมดอายุ 900 วินาที

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
Memcached
END

ตั้งค่าข้อมูลโดยใช้ Java Application

ในการตั้งค่าคีย์ในเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached set วิธี.

ตัวอย่าง

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 sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:memcached

Memcached addคำสั่งใช้เพื่อกำหนดค่าให้กับคีย์ใหม่ หากมีคีย์อยู่แล้วจะให้เอาต์พุต NOT_STORED

ไวยากรณ์

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

add key flags exptime bytes [noreply]
value

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

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

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

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

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

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

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

เอาต์พุต

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

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

  • NOT_STORED แสดงว่าข้อมูลไม่ได้เก็บไว้ใน Memcached

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราใช้ 'key' เป็นคีย์และเพิ่มค่า Memcached ลงในนั้นด้วยเวลาหมดอายุ 900 วินาที

add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
Memcached
END

เอาต์พุตความล้มเหลว

add key 0 900 5
redis
NOT_STORED

เพิ่มข้อมูลโดยใช้ Java Application

ในการเพิ่มข้อมูลในเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached add วิธี.

ตัวอย่าง

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("add status:"+mcc.add("tutorialspoint", 900, "redis").done);
      System.out.println("add status:"+mcc.add("tp", 900, "redis").done);
      
      // Get value from cache
      System.out.println("Get from Cache tp:"+mcc.get("tp"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successful
add status:false
add status:true
Get from Cache tp:redis

Memcached replaceคำสั่งใช้เพื่อแทนที่ค่าของคีย์ที่มีอยู่ หากไม่มีคีย์จะให้เอาต์พุต NOT_STORED

ไวยากรณ์

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

replace key flags exptime bytes [noreply]
value

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

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

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

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

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

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

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

เอาต์พุต

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

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

  • NOT_STORED แสดงว่าข้อมูลไม่ได้เก็บไว้ใน Memcached

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราใช้ 'key' เป็นคีย์และเก็บ memcached ไว้ในนั้นโดยมีเวลาหมดอายุ 900 วินาที หลังจากนี้คีย์เดียวกันจะถูกแทนที่ด้วยค่า 'redis'

add key 0 900 9
memcached
STORED
get key
VALUE key 0 9
memcached
END
replace key 0 900 5
redis
get key
VALUE key 0 5
redis
END

แทนที่ข้อมูลโดยใช้ Java Application

ในการแทนที่ข้อมูลในเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached replace วิธี.

ตัวอย่าง

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 sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // now replace the existing data
      System.out.println("Replace cache:"+mcc.replace("tutorialspoint", 900, "redis").done);
      
      // get the updated data
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:memcached
Replace cache:true
Get from Cache:redis

Memcached appendคำสั่งใช้เพื่อเพิ่มข้อมูลบางส่วนในคีย์ที่มีอยู่ ข้อมูลจะถูกเก็บไว้หลังจากข้อมูลที่มีอยู่ของคีย์

ไวยากรณ์

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

append key flags exptime bytes [noreply]
value

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

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

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

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

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

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

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

เอาต์พุต

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

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

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

  • CLIENT_ERROR บ่งชี้ข้อผิดพลาด

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราพยายามเพิ่มข้อมูลบางส่วนในคีย์ที่ไม่มีอยู่ ดังนั้นผลตอบแทนของ MemcachedNOT_STORED. หลังจากนี้เราจะตั้งค่าคีย์หนึ่งรายการและต่อท้ายข้อมูลเข้าไป

append tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
append tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
memcachedredis
END

ผนวกข้อมูลโดยใช้ Java Application

ในการต่อท้ายข้อมูลในเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached append วิธี.

ตัวอย่าง

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 value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // now append some data into existing key
      System.out.println("Append to cache:"+mcc.append("tutorialspoint", "redis").isDone());
      
      // get the updated key
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successful
set status:true
Get from Cache:memcached
Append to cache:true
Get from Cache:memcachedredis

Memcached prependคำสั่งใช้เพื่อเพิ่มข้อมูลบางส่วนในคีย์ที่มีอยู่ ข้อมูลจะถูกเก็บไว้ก่อนข้อมูลที่มีอยู่ของคีย์

ไวยากรณ์

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

prepend key flags exptime bytes [noreply]
value

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

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

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

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

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

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

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

เอาต์พุต

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

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

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

  • CLIENT_ERROR บ่งชี้ข้อผิดพลาด

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราเพิ่มข้อมูลบางส่วนในคีย์ที่ไม่มีอยู่ ดังนั้นผลตอบแทนของ MemcachedNOT_STORED. หลังจากนี้เราตั้งค่าคีย์หนึ่งรายการและใส่ข้อมูลไว้ข้างหน้า

prepend tutorials 0 900 5
redis
NOT_STORED
set tutorials 0 900 9
memcached
STORED
get tutorials
VALUE tutorials 0 14
memcached
END
prepend tutorials 0 900 5
redis
STORED
get tutorials
VALUE tutorials 0 14
redismemcached
END

เพิ่มข้อมูลโดยใช้ Java Application

ในการเพิ่มข้อมูลในเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached prepend วิธี.

ตัวอย่าง

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 value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // now append some data into existing key
      System.out.println("Prepend to cache:"+mcc.prepend("tutorialspoint", "redis").isDone());
      
      // get the updated key
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successful
set status:true
Get from Cache:memcached
Prepend to cache:true
Get from Cache:redismemcached

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

Memcached getคำสั่งใช้เพื่อรับค่าที่เก็บไว้ที่คีย์ หากคีย์ไม่มีอยู่ใน Memcached ก็จะไม่ส่งคืนอะไรเลย

ไวยากรณ์

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

get key

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราใช้ tutorialspoint เป็นคีย์และจัดเก็บ memcached ไว้ในนั้นโดยมีเวลาหมดอายุ 900 วินาที

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END

รับข้อมูลโดยใช้ Java Application

ในการรับข้อมูลจากเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached get วิธี.

ตัวอย่าง

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 sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
     
     // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:memcached

Memcached getsคำสั่งใช้เพื่อรับค่าด้วยโทเค็น CAS หากคีย์ไม่มีอยู่ใน Memcached ก็จะไม่ส่งคืนอะไรเลย

ไวยากรณ์

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

get key

ตัวอย่าง

set tutorialspoint 0 900 9
memcached
STORED
gets tutorialspoint
VALUE tutorialspoint 0 9 1
memcached
END

ในตัวอย่างนี้เราใช้ tutorialspoint เป็นคีย์และเก็บ memcached ไว้ในนั้นโดยมีเวลาหมดอายุ 900 วินาที

รับข้อมูล CAS โดยใช้แอปพลิเคชัน Java

ในการรับข้อมูล 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 sucessfully");
      System.out.println("set status:"+mcc.set("tutorialspoint", 900, "memcached").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.gets("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:{CasValue 2/memcached}

Memcached delete คำสั่งใช้เพื่อลบคีย์ที่มีอยู่ออกจากเซิร์ฟเวอร์ Memcached

ไวยากรณ์

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

delete key [noreply]

เอาต์พุต

คำสั่ง CAS อาจให้ผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้ -

  • DELETED แสดงว่าการลบสำเร็จ

  • ERROR ระบุข้อผิดพลาดขณะลบข้อมูลหรือไวยากรณ์ผิด

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

ตัวอย่าง

ในตัวอย่างนี้เราใช้ tutorialspoint เป็นคีย์และเก็บ memcached ไว้ในนั้นโดยมีเวลาหมดอายุ 900 วินาที หลังจากนี้จะลบคีย์ที่เก็บไว้

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
delete tutorialspoint
DELETED
get tutorialspoint
END
delete tutorialspoint
NOT_FOUND

ลบข้อมูลโดยใช้ Java Application

ในการลบข้อมูลจากเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached delete วิธี.

ตัวอย่าง

import java.net.InetSocketAddress;
import java.util.concurrent.Future;

import net.spy.memcached.MemcachedClient;

public class MemcachedJava {
   public static void main(String[] args) {
   
      try{
   
         // Connecting to Memcached server on localhost
         MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
         System.out.println("Connection to server sucessful.");

         // add data to memcached server
         Future fo = mcc.set("tutorialspoint", 900, "World's largest online tutorials library");

         // print status of set method
         System.out.println("set status:" + fo.get());

         // retrieve and check the value from cache
         System.out.println("tutorialspoint value in cache - " + mcc.get("tutorialspoint"));

         // try to add data with existing key
         Future fo = mcc.delete("tutorialspoint");

         // print status of delete method
         System.out.println("delete status:" + fo.get());

         // retrieve and check the value from cache
         System.out.println("tutorialspoint value in cache - " + mcc.get("codingground"));

         // Shutdowns the memcached client
         mcc.shutdown();
         
      }catch(Exception ex)
         System.out.println(ex.getMessage());
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successful
set status:true
tutorialspoint value in cache - World's largest online tutorials library
delete status:true
tutorialspoint value in cache - null

Memcached delete คำสั่งใช้เพื่อลบคีย์ที่มีอยู่ออกจากเซิร์ฟเวอร์ Memcached

ไวยากรณ์

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

delete key

หากลบคีย์สำเร็จแล้วจะส่งคืน DELETED หากไม่พบคีย์จะส่งคืน NOT_FOUND มิฉะนั้นจะส่งกลับ ERROR

ตัวอย่าง

ในตัวอย่างนี้เราใช้ tutorialspoint เป็นคีย์และเก็บ memcached ไว้ในนั้นโดยมีเวลาหมดอายุ 900 วินาที หลังจากนี้จะลบคีย์ที่เก็บไว้

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
delete tutorialspoint
DELETED
get tutorialspoint
END
delete tutorialspoint
NOT_FOUND

ลบข้อมูลโดยใช้ Java Application

ในการลบข้อมูลจากเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached delete วิธี.

ตัวอย่าง

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").done);
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
      
      // delete value from cache
      System.out.println("Delete from Cache:"+mcc.delete("tutorialspoint").isDone());
      
      // check whether value exists or not
      System.out.println("Get from Cache:"+mcc.get("tutorialspoint"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successful
set status:true
Get from Cache:memcached
Delete from Cache:true
Get from Cache:null

Memcached incr และ decrคำสั่งใช้เพื่อเพิ่มหรือลดค่าตัวเลขของคีย์ที่มีอยู่ หากไม่พบคีย์จะส่งคืนNOT_FOUND. หากคีย์ไม่ใช่ตัวเลขก็จะส่งกลับCLIENT_ERROR cannot increment or decrement non-numeric value. มิฉะนั้น,ERROR จะถูกส่งกลับ

ไวยากรณ์ - รวม

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

incr key increment_value

ตัวอย่าง

ในตัวอย่างนี้เราใช้ผู้เยี่ยมชมเป็นกุญแจสำคัญและกำหนด 10 ในขั้นต้นหลังจากนั้นเราจะเพิ่มผู้เข้าชมทีละ 5

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
incr visitors 5
15
get visitors
VALUE visitors 0 2
15
END

ไวยากรณ์ - decr

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

decr key decrement_value

ตัวอย่าง

set visitors 0 900 2
10
STORED
get visitors
VALUE visitors 0 2
10
END
decr visitors 5
5
get visitors
VALUE visitors 0 1
5
END

Incr / Decr โดยใช้ Java Application

หากต้องการเพิ่มหรือลดข้อมูลในเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached incr or decr วิธีการตามลำดับ

ตัวอย่าง

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 sucessfully");
      System.out.println("set status:"+mcc.set("count", 900, "5").isDone());
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("count"));
      
      // now increase the stored value
      System.out.println("Increment value:"+mcc.incr("count", 2));
      
      // now decrease the stored value
      System.out.println("Decrement value:"+mcc.decr("count", 1));
      
      // now get the final stored value
      System.out.println("Get from Cache:"+mcc.get("count"));
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:5
Increment value:7
Decrement value:6
Get from Cache:6

Memcached stats คำสั่งใช้เพื่อส่งคืนข้อมูลสถิติของเซิร์ฟเวอร์เช่น PID เวอร์ชันการเชื่อมต่อ ฯลฯ

ไวยากรณ์

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

stats

ตัวอย่าง

stats
STAT pid 1162
STAT uptime 5022
STAT time 1415208270
STAT version 1.4.14
STAT libevent 2.0.19-stable
STAT pointer_size 64
STAT rusage_user 0.096006
STAT rusage_system 0.152009
STAT curr_connections 5
STAT total_connections 6

STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 6
STAT cmd_set 4
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 4
STAT get_misses 2
STAT delete_misses 1
STAT delete_hits 1

STAT incr_misses 2
STAT incr_hits 1
STAT decr_misses 0
STAT decr_hits 1
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0

STAT auth_errors 0
STAT bytes_read 262
STAT bytes_written 313
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16

STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 1
STAT evicted_unfetched 0
STAT bytes 142
STAT curr_items 2
STAT total_items 6
STAT evictions 0
STAT reclaimed 1
END

สถิติการใช้ Java Application

ในการรับสถิติจากเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached stats วิธี.

ตัวอย่าง

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("Stats:"+mcc.stats);
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successful
Stats:[/127.0.0.1:11211:[delete_hits:0, bytes:71, total_items:4,
rusage_system:0.220013, touch_misses:0, cmd_touch:0, listen_disabled_num:0,
auth_errors:0, evictions:0, version:1.4.14, pointer_size:64, time:1417279366,
incr_hits:1, threads:4, expired_unfetched:0, limit_maxbytes:67108864,
hash_is_expanding:0, bytes_read:170, curr_connections:8, get_misses:1,
reclaimed:0, bytes_written:225, hash_power_level:16, connection_structures:9,
cas_hits:0, delete_misses:0, total_connections:11, rusage_user:0.356022,
cmd_flush:0, libevent:2.0.19-stable, uptime:12015, reserved_fds:20,
touch_hits:0, cas_badval:0, pid:1138, get_hits:2, curr_items:1, cas_misses:0,
accepting_conns:1, evicted_unfetched:0, cmd_get:3, cmd_set:2, auth_cmds:0,
incr_misses:1, hash_bytes:524288, decr_misses:1, decr_hits:1, conn_yields:0]]

Memcached stats items คำสั่งใช้เพื่อรับสถิติรายการเช่นการนับอายุการขับไล่และอื่น ๆ ที่จัดโดย slabs ID

ไวยากรณ์

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

stats items

ตัวอย่าง

stats items
STAT items:1:number 1
STAT items:1:age 7
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
END

Memcached stats slabs คำสั่งแสดงสถิติ slabs เช่นขนาดการใช้หน่วยความจำคำสั่งจำนวน ฯลฯ จัดโดย slabs ID

ไวยากรณ์

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

stats slabs

ตัวอย่าง

stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 1
STAT 1:free_chunks 10921
STAT 1:free_chunks_end 0
STAT 1:mem_requested 71
STAT 1:get_hits 0
STAT 1:cmd_set 1
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END

Memcached stats sizesคำสั่งให้ข้อมูลเกี่ยวกับขนาดและจำนวนรายการของแต่ละขนาดภายในแคช ข้อมูลจะถูกส่งกลับในสองคอลัมน์ คอลัมน์แรกคือขนาดของรายการ (ปัดเศษขึ้นเป็นขอบเขต 32 ไบต์ที่ใกล้ที่สุด) และคอลัมน์ที่สองคือการนับจำนวนรายการที่มีขนาดนั้นภายในแคช

ไวยากรณ์

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

stats sizes

ตัวอย่าง

stats sizes
STAT 96 1
END

สถิติขนาดรายการมีประโยชน์ในการกำหนดขนาดของวัตถุที่คุณจัดเก็บเท่านั้น เนื่องจากการจัดสรรหน่วยความจำที่แท้จริงมีความเกี่ยวข้องเฉพาะในแง่ของขนาดชิ้นและขนาดหน้าข้อมูลจึงมีประโยชน์เฉพาะในระหว่างเซสชันการดีบักหรือการวินิจฉัยอย่างรอบคอบ

Memcached flush_allคำสั่งใช้เพื่อลบข้อมูลทั้งหมด (คู่คีย์ - ค่า) จากเซิร์ฟเวอร์ Memcached ยอมรับพารามิเตอร์ทางเลือกที่เรียกว่าtime ที่กำหนดเวลาหลังจากที่จะล้างข้อมูล Memcached

ไวยากรณ์

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

flush_all [time] [noreply]

คำสั่งดังกล่าวส่งคืนตกลงเสมอ

ตัวอย่าง

ในตัวอย่างต่อไปนี้เราจัดเก็บข้อมูลบางส่วนไว้ในเซิร์ฟเวอร์ Memcached จากนั้นจึงล้างข้อมูลทั้งหมด

set tutorialspoint 0 900 9
memcached
STORED
get tutorialspoint
VALUE tutorialspoint 0 9
memcached
END
flush_all
OK
get tutorialspoint
END

ล้างข้อมูลโดยใช้ Java Application

ในการล้างข้อมูลจากเซิร์ฟเวอร์ Memcached คุณต้องใช้ Memcached flush วิธี.

ตัวอย่าง

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 sucessfully");
      System.out.println("set status:"+mcc.set("count", 900, "5").isDone());
      
      // Get value from cache
      System.out.println("Get from Cache:"+mcc.get("count"));
     
      // now increase the stored value
      System.out.println("Increment value:"+mcc.incr("count", 2));
     
      // now decrease the stored value
      System.out.println("Decrement value:"+mcc.decr("count", 1));
      
      // now get the final stored value
      System.out.println("Get from Cache:"+mcc.get("count"));
      
      // now clear all this data
      System.out.println("Clear data:"+mcc.flush().isDone());
   }
}

เอาต์พุต

ในการคอมไพล์และรันโปรแกรมคุณจะเห็นผลลัพธ์ต่อไปนี้ -

Connection to server successfully
set status:true
Get from Cache:5
Increment value:7
Decrement value:6
Get from Cache:6
Clear data:true