Memcache คุณค่าที่คุณควร
เมื่อระบบที่พวกคุณทำอยู่นั้น เป็นระบบที่แสดงผลลัพธ์จาก database (ไม่ว่าจะใช้ของอะไรก็แล้วแต่) ที่ซ้ำๆเดิมๆ เป็นระยะเวลาพอสมควร และไม่ว่า user สักกี่คนหรือ user กลุ่มใหญ่ๆ เข้ามาใช้ระบบของคุณ ก็เห็นผลลัพธ์เหมือนๆกัน.......ประเด็นอยู่ที่ว่า เราจะ query มันออกมาทำไมหลายๆรอบเพื่อผลลัพธ์เดิมๆ
แล้วถ้ายิง database มีขนาดที่ใหญ่มาก ทำให้การ query ข้อมูลออกมาจากฐานข้องมูลมีความล่าช้า หรือไม่ก็มีผู้ใช้จำนวนมากเข้ามาใช้บริการ ก็จะทำให้ DBMS จะต้องเข้าไปอ่านข้อมูลจาก Harddisk ขึ้นมาทำให้เกิดปัญหาคอขวดเมื่อมีผู้ใช้งานปริมาณมาก
เราจึงมีวิธีแก้ปัญหาโดยการนำข้อมูลที่ถูกใช้บ่อยๆมาเก็บเอาไว้ใน cache ซึ้งเราจะนำข้อมูลเหล่านี้ออกมาใช้ได้ในทันที โดยไม่ต้องไป query ใน database อีก
Server มี Memcache หรือยังกว่า
connect(‘localhost’, 11211) or die (“Could not connect”);
// ติดต่อกับ server โดย localhost และ 11211 คือ port สำหรับติดต่อ memcache
echo “Version : “.$memcache->getVersion();
// getVersion เพิ่อดูว่า server ติดตั้งโปรแกรมเวอร์ชันอะไร
แต่ถ้ายังไม่มีผมก็จะแนะนำวิธีการติดตั้งไอ้เจ้า Memcache โดยคลิกไปตาม link นี้นะครับ (เป็น Cent OS นะแจ๊ะ)
https://support.hostatom.com/knowledgebase.php?action=displayarticle&id=78
โดยถ้าเรียบร้อยก็เอาละ!!! มาเริ่มกันเลย
connect(‘localhost’, 11211);คือการ connect เข้าไปยัง Memcache
$key = md5($sql);เข้ารหัส query (query อะไรก็แล้วแต่เลยจร้า) เป็น key ของ memcache เพื่อใช้เรียก memcache (หรือจะใช้ key เป็นอะไรก็แล้วแต่เลยเจ้าฮะ)
$getResult = $memcache->get($key);คือการดึงข้อมูลออกจาก Memcache โดยใช้ Key ที่ถูกเข้ารหัสก่อนหน้านี้ (การเรียกใช้ข้อมูลเป็นไปในลักษณะ key - value)
แต่ทว่า........Memcache ยังไม่ได้ถูกบันทึกค่าอะไรลงไปเลยนิ ผลลัพธ์ก็ไม่ได้ออกมา ดังนั้นเขา(จากที่เคยเห็นเขาทำกัน...อ๊ะ หรือผมคนเดียวที่เขียนแบบนี้) จึงนิยมเขียนโปรแกรมเพื่อตรวจสอบว่ามี value อยู่ใน memcache หรือไม่ โดยถ้ามีก็ให้นำออกมาใช้ ถ้าไม่มีก็ให้ query แล้วนำผลลัพธ์ ออกมา set ค่า key และ value เข้าไปใหม่และกำหนดระยะเวลาที่จะเครีย memcache ด้วยเพื่อที่จะได้มีข้อมูลที่มีการอัพเดทเอาไปใช้
if($getResult){$setResule ไม่เป็นค่าว่างก็แปลว่ามีข้อมูลอยู่
echo "Load Data From Memcache";
print_r($getResult);
}
else {
echo “Load Data From Database";
$result = mysql_query($sql) or die(mysql_error());
$arr = array();
while($rs = mysql_fetch_array($result)){
array_push($arr, array(
‘id’ => $rs[‘id’],
‘title’ => $rs[‘title’],
‘detail’ => $rs[‘detail’],
‘time’ => $rs[‘time’]
));
}
$memcache->set($key, $arr, MEMCACHE_COMPRESSED, 120);
print_r($arr);
}- $key คือ key ที่ใช้ระบุข้อมูลเวลาที่จะนำข้อมูลออกจาก Memcache
- $arr คือ ข้อมูลที่ได้จากการ query
(ปล. mysql_query เลิกใช้ได้แล้วนะครับคุณผู้อ่าน ไปใช้ PDO กันเถิดชาวไทย ในที่นี้ผมไม่อยากจะเขียนให้มันยาวเท่านั้น เลยใช้ไปก่อน)
- MEMCACHE_COMPRESSEDMEMCACHE_COMPRESSED คือการเก็บข้อมูลลง Memcache โดยการบีบอัดข้อมูล
- 120 คือเวลาที่จะบันทึกข้อมูลนี้เอาไว้ 120 วินาที เมื่อครบ 120 วินาที ข้อมูลของ key นี้จะถูกเคลียร์
การใช้ Memcache ก็ง่ายนิดเดียวครับ ลดภาระของ DBMS ไปได้ตั้งเยอะ ก็บอกแล้ว "Memcache คุณค่า ที่คุณคู่ควร"
ไม่มีความคิดเห็น:
แสดงความคิดเห็น