การใช้ PHP memcache Extension เพื่อสร้างแคชอย่างมีประสิทธิภาพบน ServBay
ServBay คือสภาพแวดล้อมการพัฒนาเว็บแบบโลคอลที่ทรงพลัง ซึ่งมาพร้อมเครื่องมือสำหรับนักพัฒนามากมาย รวมถึงการรองรับ PHP memcache
extension ในตัว memcache
เป็นระบบแคชอ็อบเจกต์ในหน่วยความจำที่กระจายตัวและมีประสิทธิภาพสูง ใช้งานกันอย่างแพร่หลายบนเว็บแอปสมัยใหม่ สามารถช่วยเพิ่มความเร็วและประสิทธิภาพของแอปได้อย่างเห็นได้ชัด ด้วย ServBay นักพัฒนาสามารถเปิดใช้งานและใช้ memcache
ในการแคชข้อมูลในโปรเจกต์ PHP ของตนได้อย่างง่ายดาย
Memcache คืออะไร?
Memcache คือระบบแคชข้อมูลในหน่วยความจำที่ออกแบบมาเพื่อแบ่งเบาภาระของฐานข้อมูลหรือบริการ backend อื่นๆ โดยจัดเก็บข้อมูลไว้ในแรม ช่วยให้เว็บแอปพลิเคชันแบบไดนามิกทำงานได้รวดเร็วขึ้น เหมาะอย่างยิ่งสำหรับการแคชข้อมูลที่ถูกเรียกใช้บ่อย เช่น ผลลัพธ์จากการ query ฐานข้อมูล, การตอบกลับจาก API หรือส่วนของหน้าเว็บ ในการพัฒนาแบบโลคอล การใช้ memcache
สามารถช่วยจำลองพฤติกรรมแคชจริงใน production และช่วยปรับแต่งประสิทธิภาพของแอปพลิเคชันได้
คุณสมบัติเด่น
- ความเร็วสูง: ด้วยการแคชข้อมูลในแรม Memcache ให้ความเร็วในการอ่าน/เขียนข้อมูลสูงมาก ส่งผลให้อแอปพลิเคชันตอบสนองต่อผู้ใช้ได้ดีขึ้น
- โครงสร้างแบบกระจาย: สามารถแบ่งแคชไปเก็บไว้บนเครื่องเซิร์ฟเวอร์ได้หลายเครื่อง เพิ่มความสามารถในการขยายและความเสถียรให้กับระบบ
- ใช้งานง่าย: มี API ที่เข้าใจง่าย ช่วยให้นักพัฒนานำไปใช้ในโครงการได้อย่างรวดเร็ว
- ลดภาระฝั่ง backend: แคชข้อมูลที่ถูกเรียกใช้บ่อย ช่วยลดจำนวนการเข้าถึงฐานข้อมูล, ไฟล์ หรือ datasource ที่ใช้เวลานาน ลดภาระงานบริการ backend ได้อย่างมีนัยสำคัญ
ความแตกต่างระหว่าง Memcache และ Memcached
ในระบบนิเวศของ PHP มี extension ที่เกี่ยวข้องกับ Memcache อยู่สองตัวคือ memcache
และ memcached
ทั้งสองใช้งานสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ Memcache และจัดการข้อมูลแคช แต่รายละเอียดและ API มีความต่างกัน:
memcache
extension:- เป็น extension รุ่นแรกๆ ของ PHP
- ให้ API แบบ procedural
- ฟีเจอร์พื้นฐาน อาจขาดคุณสมบัติขั้นสูงบางอย่าง (เช่น Consistent Hashing, SASL Authentication)
memcached
extension:- เป็น extension รุ่นใหม่กว่าซึ่งใช้ client library ชื่อ
libmemcached
- ให้ API แบบ OOP (Object-Oriented)
- รองรับฟีเจอร์ขั้นสูง เช่น Consistent Hashing สำหรับการกระจาย key, โปรโตคอล binary, SASL Auth และการตั้งค่าขั้นสูงอื่นๆ
- เป็น extension รุ่นใหม่กว่าซึ่งใช้ client library ชื่อ
ServBay มาพร้อมกับ PHP รุ่นต่างๆ ที่รองรับทั้ง memcache
และ memcached
extension โดยปกติ memcache
จะถูกเปิดใช้งานเป็นค่าเริ่มต้น ซึ่งเป็นหัวข้อหลักของคู่มือนี้
PHP memcache
extension ใน ServBay
ทุกเวอร์ชันของ PHP ที่มาพร้อมกับ ServBay จะถูกติดตั้งและเปิดใช้งาน memcache
extension ไว้แล้วโดยอัตโนมัติ หมายความว่าหลังจากติดตั้งหรือสลับไปยังเวอร์ชัน PHP ใดๆ คุณสามารถใช้งานฟีเจอร์ของ memcache
ได้เลยโดยไม่ต้องตั้งค่าเอง เวอร์ชันของ memcache
ที่ใช้จะขึ้นอยู่กับเวอร์ชันของ PHP ที่คุณเลือกโดย ServBay จะจัดสรรอย่างเหมาะสมโดยอัตโนมัติ
ตรวจสอบและจัดการ memcache
extension
แม้ว่า memcache
จะถูกเปิดใช้งานไว้แล้ว คุณก็สามารถตรวจสอบสถานะหรือจัดการได้ผ่านกราฟิกอินเตอร์เฟซ (GUI) ของ ServBay
- เปิดแอป ServBay
- ที่แถบด้านข้าง เลือก ซอฟต์แวร์แพ็คเกจ (Packages)
- ในรายการแพ็คเกจ ค้นหา PHP เวอร์ชันที่ใช้งานอยู่ (เช่น PHP 8.2)
- คลิกที่รายการ PHP เพื่อตรวจสอบรายละเอียดและตัวเลือกการตั้งค่า
- ที่รายการส่วนขยาย PHP ค้นหา
memcache
และตรวจดูให้แน่ใจว่า toggle อยู่ในสถานะ "เปิด" (เป็นสีเขียว) - หากต้องการปิด/เปิด extension สามารถกด toggle ได้ตามต้องการ เมื่อเปลี่ยนแปลง ServBay จะขอให้คุณรีสตาร์ท PHP service เพื่อให้การเปลี่ยนแปลงมีผล
นอกจากนี้ ต้องตรวจสอบด้วยว่า Memcache service ทำงานอยู่
- ที่แถบด้านข้างของ ServBay เลือก ภาพรวม (Overview) หรือ ซอฟต์แวร์แพ็คเกจ (Packages)
- ค้นหา Memcache ในลิสต์บริการหรือแพ็คเกจ
- ตรวจดูว่าแสดงสถานะ "กำลังทำงาน" (Running) หรือไม่ หากไม่ ให้ลองเริ่มต้นบริการ
ใช้งาน memcache
ในโค้ด PHP
เมื่อยืนยันว่าได้เปิดใช้งานทั้ง memcache
extension และ Memcache service แล้ว คุณสามารถเขียนโค้ด PHP เพื่อใช้งานแคชด้วยไลบรารี client ของ memcache ได้เลย Memcache จะรันบน localhost
พอร์ต 11211
โดยดีฟอลต์
ตัวอย่างโค้ดด้านล่าง สาธิตการเชื่อมต่อเซิร์ฟเวอร์ Memcache, ตั้งค่าและดึงข้อมูลจากแคช:
php
<?php
// ตรวจสอบว่า memcache extension ถูกโหลดหรือไม่
if (!class_exists('Memcache')) {
die("Memcache extension is not loaded.");
}
// สร้างอินสแตนซ์ Memcache
$memcache = new Memcache();
// เชื่อมต่อ Memcache server
// ค่าเริ่มต้นคือ localhost และพอร์ต 11211
$host = 'localhost';
$port = 11211;
if (!$memcache->connect($host, $port)) {
die("Could not connect to Memcache server at $host:$port");
} else {
echo "Successfully connected to Memcache server.<br>";
}
// --- ตั้งค่าข้อมูลแคช ---
$key = 'user_profile_servbay_demo'; // กำหนดชื่อ key สำหรับแคช
$data = [ // ข้อมูลที่จะแคช สามารถเป็น string, number, array, object ได้
'name' => 'ServBay Demo User',
'email' => '[email protected]',
'age' => 30,
'registered_at' => time()
];
// ใช้เมธอด set() เพื่อตั้งค่าแคช
// พารามิเตอร์: key, value, flag การบีบอัด (optional), อายุแคช (วินาที)
// ค่าคงที่ MEMCACHE_COMPRESSED หมายถึงเปิดการบีบอัด เพื่อประหยัดแรมแต่ใช้ CPU เพิ่มขึ้น
$expiration_time = 3600; // แคช 1 ชม. (3600 วินาที)
if ($memcache->set($key, $data, MEMCACHE_COMPRESSED, $expiration_time)) {
echo "Data successfully set in cache for key: $key<br>";
} else {
echo "Failed to set data in cache for key: $key<br>";
}
// --- ดึงข้อมูลจากแคช ---
// ใช้เมธอด get() เพื่อดึงข้อมูล
$cachedData = $memcache->get($key);
if ($cachedData !== false) { // หาก get() คืนค่า false แสดงว่าไม่เจอแคชหรือแคชหมดอายุ
echo "Data retrieved from cache for key: $key:<br>";
print_r($cachedData);
echo "<br>";
} else {
echo "No cache found or cache expired for key: $key<br>";
}
// --- ลบแคช (หากต้องการ) ---
// ใช้เมธอด delete() เพื่อกำจัดแคชออก
// $memcache->delete($key);
// echo "Cache for key: $key deleted.<br>";
// --- ปิดการเชื่อมต่อ (โดยปกติ PHP จะปิดให้อัตโนมัติเมื่อจบสคริปต์) ---
// $memcache->close();
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
ให้บันทึกโค้ดข้างต้นเป็นไฟล์ .php
(เช่น memcache_test.php
), วางในโฟลเดอร์ root ของเว็บไซต์ใน ServBay (เช่น /Applications/ServBay/www/your-project-name/
) แล้วเข้าถึงไฟล์นี้ผ่าน browser ที่ URL ที่เกี่ยวข้อง (เช่น http://your-project-name.servbay.demo/memcache_test.php
) คุณจะเห็นผลการเชื่อมต่อและการแคชผ่าน Memcache
ข้อกำหนดเบื้องต้น
ก่อนใช้งานฟีเจอร์ memcache
ของ ServBay โปรดตรวจสอบว่า
- คุณได้ติดตั้งและเปิดใช้ ServBay บน macOS เรียบร้อยแล้ว
- ได้ตั้งค่าเว็บไซต์ PHP หนึ่งหรือหลายเว็บไซต์ใน ServBay โดยใช้ PHP รุ่นที่รองรับ
memcache
- เปิดใช้ Memcache service และสถานะเป็นปกติใน ServBay
ข้อควรระวังและแนวทางแก้ปัญหา
- เชื่อมต่อ Memcache service ไม่ได้:
- ตรวจสอบให้แน่ใจว่าได้เปิด Memcache service อยู่ใน ServBay โดยดูที่หน้ารายการ "แพ็คเกจ" หรือ "ภาพรวม" แล้วลอง start
- ตรวจสอบให้ PHP ชี้ host และ port ถูกต้อง (
localhost:11211
) - เช็กตั้งค่ากำแพงไฟล์วอลล์หากจำเป็น ให้พอร์ต 11211 เชื่อมต่อผ่านโลคอลได้ปกติ (โดยทั่วไปในพัฒนาโลคอลจะไม่มีปัญหา แต่บางเครื่องอาจถูกบล็อก)
- PHP แจ้งข้อผิดพลาด
Class 'Memcache' not found
:- หมายความว่า PHP extension
memcache
ยังไม่ได้ถูกโหลด - ให้เช็กที่ GUI ของ ServBay ว่า PHP รุ่นที่ใช้เปิด
memcache
extension แล้วหรือยัง - หลังเปิด extension ต้องกด restart service PHP เวอร์ชันนั้น (หรืออาจต้อง restart ServBay ใหม่ทั้งโปรแกรม)
- หมายความว่า PHP extension
- ข้อมูลแคชไม่ทำงานตามคาด
- ตรวจ key ของแคชให้ถูกต้อง
- ตรวจดูว่าเวลา expire ที่ตั้งไว้เหมาะสมหรือไม่
- ให้แน่ใจว่าการเขียนและอ่านแคชอยู่บน instance server เดียวกัน (ค่าเริ่มต้น ServBay มี instance เดียว)
สรุป
ServBay มอบวิธีที่ง่ายและทรงพลังให้กับนักพัฒนา PHP สำหรับการใช้ memcache
ในการพัฒนาโลคอล ระบบแคชและบริการ Memcache บน ServBay ถูกติดตั้งรวมมา และสามารถจัดการได้อย่างสะดวก ช่วยให้นักพัฒนาออกแบบกลยุทธ์แคชสำหรับ production ได้จากเครื่องตนเอง เพิ่มความเร็วและประสิทธิภาพของเว็บแอปพลิเคชัน โดยไม่ต้องกังวลเรื่องการตั้งค่าสิ่งแวดล้อมให้ยุ่งยาก ด้วย ServBay คุณจึงโฟกัสที่การพัฒนาโค้ดและสร้างผลงานคุณภาพได้อย่างเต็มที่